⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_task.txt

📁 ATMEL ARM7 SAM64 Porting ucos / Keil ARM VER3.04。不同于其它
💻 TXT
📖 第 1 页 / 共 2 页
字号:
000170  e1a00004          MOV      r0,r4                 ;629
000174  ebfffffe          BL       OS_CPU_SR_Restore     ;629
000178  e3a00000          MOV      r0,#0                 ;630
00017c  e5c50000          STRB     r0,[r5,#0]            ;630
000180  e1a00006          MOV      r0,r6                 ;631
000184  eafffff3          B        |L1.344|              ;631
                          ENDP

                  OSTaskNameSet PROC
;;;662    void  OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *err)
;;;663    {
000188  e92d41f0          PUSH     {r4-r8,lr}
00018c  e1a05000          MOV      r5,r0
000190  e1a07001          MOV      r7,r1
000194  e1a04002          MOV      r4,r2
;;;664        INT8U      len;
;;;665        OS_TCB    *ptcb;
;;;666    #if OS_CRITICAL_METHOD == 3                          /* Allocate storage for CPU status register       */
;;;667        OS_CPU_SR  cpu_sr = 0;
;;;668    #endif
;;;669    
;;;670    
;;;671    
;;;672    #if OS_ARG_CHK_EN > 0
;;;673        if (err == (INT8U *)0) {                         /* Validate 'err'                                 */
;;;674            return;
;;;675        }
;;;676        if (prio > OS_LOWEST_PRIO) {                     /* Task priority valid ?                          */
;;;677            if (prio != OS_PRIO_SELF) {
;;;678                *err = OS_PRIO_INVALID;                  /* No                                             */
;;;679                return;
;;;680            }
;;;681        }
;;;682        if (pname == (INT8U *)0) {                        /* Is 'pname' a NULL pointer?                     */
;;;683            *err = OS_ERR_PNAME_NULL;					 /* Yes                                            */
;;;684            return;
;;;685        }
;;;686    #endif
;;;687        OS_ENTER_CRITICAL();
000198  ebfffffe          BL       OS_CPU_SR_Save
;;;688        if (prio == OS_PRIO_SELF) {                      /* See if caller desires to set it's own name     */
00019c  e35500ff          CMP      r5,#0xff
0001a0  e1a06000          MOV      r6,r0                 ;687
;;;689            prio = OSTCBCur->OSTCBPrio;
0001a4  059f0120          LDREQ    r0,|L1.716|
;;;690        }
;;;691        ptcb = OSTCBPrioTbl[prio];
0001a8  e3a0800b          MOV      r8,#0xb
0001ac  05900000          LDREQ    r0,[r0,#0]            ;689  ; OSTCBCur
0001b0  05d05020          LDRBEQ   r5,[r0,#0x20]         ;689
0001b4  e59f0108          LDR      r0,|L1.708|
0001b8  e7905105          LDR      r5,[r0,r5,LSL #2]
;;;692        if (ptcb == (OS_TCB *)0) {                       /* Does task exist?                               */
0001bc  e3550000          CMP      r5,#0
;;;693            OS_EXIT_CRITICAL();                          /* No                                             */
;;;694            *err = OS_TASK_NOT_EXIST;
;;;695            return;
;;;696        }
;;;697        if (ptcb == (OS_TCB *)1) {                       /* Task assigned to a Mutex?                      */
0001c0  13550001          CMPNE    r5,#1
0001c4  1a000004          BNE      |L1.476|              ;692
;;;698            OS_EXIT_CRITICAL();                          /* Yes                                            */
0001c8  e1a00006          MOV      r0,r6
0001cc  ebfffffe          BL       OS_CPU_SR_Restore
;;;699            *err = OS_TASK_NOT_EXIST;
0001d0  e5c48000          STRB     r8,[r4,#0]
;;;700            return;
;;;701        }
;;;702        len = OS_StrLen(pname);                          /* Yes, Can we fit the string in the TCB?         */
;;;703        if (len > (OS_TASK_NAME_SIZE - 1)) {             /*      No                                        */
;;;704            OS_EXIT_CRITICAL();
;;;705            *err = OS_ERR_TASK_NAME_TOO_LONG;
;;;706            return;
;;;707        }
;;;708        (void)OS_StrCopy(ptcb->OSTCBTaskName, pname);    /*      Yes, copy to TCB                          */
;;;709        OS_EXIT_CRITICAL();
;;;710        *err = OS_NO_ERR;
;;;711    }
                  |L1.468|
0001d4  e8bd41f0          POP      {r4-r8,lr}
0001d8  e12fff1e          BX       lr
                  |L1.476|
0001dc  e1a00007          MOV      r0,r7                 ;702
0001e0  ebfffffe          BL       OS_StrLen             ;702
0001e4  e350000f          CMP      r0,#0xf               ;703
0001e8  9a000003          BLS      |L1.508|              ;703
0001ec  e1a00006          MOV      r0,r6                 ;704
0001f0  ebfffffe          BL       OS_CPU_SR_Restore     ;704
0001f4  e3a0000e          MOV      r0,#0xe               ;705
0001f8  ea000005          B        |L1.532|              ;706
                  |L1.508|
0001fc  e1a01007          MOV      r1,r7                 ;708
000200  e285003c          ADD      r0,r5,#0x3c           ;708
000204  ebfffffe          BL       OS_StrCopy            ;708
000208  e1a00006          MOV      r0,r6                 ;709
00020c  ebfffffe          BL       OS_CPU_SR_Restore     ;709
000210  e3a00000          MOV      r0,#0                 ;710
                  |L1.532|
000214  e5c40000          STRB     r0,[r4,#0]            ;710
000218  eaffffed          B        |L1.468|              ;710
                          ENDP

                  OSTaskStkChk PROC
;;;799    INT8U  OSTaskStkChk (INT8U prio, OS_STK_DATA *p_stk_data)
;;;800    {
00021c  e92d41f0          PUSH     {r4-r8,lr}
000220  e1a04000          MOV      r4,r0
;;;801        OS_TCB    *ptcb;
;;;802        OS_STK    *pchk;
;;;803        INT32U     free;
;;;804        INT32U     size;
;;;805    #if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
;;;806        OS_CPU_SR  cpu_sr = 0;
;;;807    #endif
;;;808    
;;;809    
;;;810    
;;;811    #if OS_ARG_CHK_EN > 0
;;;812        if (prio > OS_LOWEST_PRIO) {                       /* Make sure task priority is valid             */
;;;813            if (prio != OS_PRIO_SELF) {
;;;814                return (OS_PRIO_INVALID);
;;;815            }
;;;816        }
;;;817        if (p_stk_data == (OS_STK_DATA *)0) {              /* Validate 'p_stk_data'                        */
;;;818            return (OS_ERR_PDATA_NULL);
;;;819        }
;;;820    #endif
;;;821        p_stk_data->OSFree = 0;                            /* Assume failure, set to 0 size                */
000224  e3a00000          MOV      r0,#0
;;;822        p_stk_data->OSUsed = 0;
000228  e5810000          STR      r0,[r1,#0]
00022c  e1a06001          MOV      r6,r1                 ;800
000230  e5810004          STR      r0,[r1,#4]
;;;823        OS_ENTER_CRITICAL();
000234  ebfffffe          BL       OS_CPU_SR_Save
;;;824        if (prio == OS_PRIO_SELF) {                        /* See if check for SELF                        */
000238  e35400ff          CMP      r4,#0xff
;;;825            prio = OSTCBCur->OSTCBPrio;
00023c  059f1088          LDREQ    r1,|L1.716|
000240  05911000          LDREQ    r1,[r1,#0]  ; OSTCBCur
000244  05d14020          LDRBEQ   r4,[r1,#0x20]
;;;826        }
;;;827        ptcb = OSTCBPrioTbl[prio];
000248  e59f1074          LDR      r1,|L1.708|
00024c  e7911104          LDR      r1,[r1,r4,LSL #2]
;;;828        if (ptcb == (OS_TCB *)0) {                         /* Make sure task exist                         */
000250  e3510000          CMP      r1,#0
;;;829            OS_EXIT_CRITICAL();
;;;830            return (OS_TASK_NOT_EXIST);
;;;831        }
;;;832        if (ptcb == (OS_TCB *)1) {
000254  13510001          CMPNE    r1,#1
000258  1a000003          BNE      |L1.620|              ;828
;;;833            OS_EXIT_CRITICAL();
00025c  ebfffffe          BL       OS_CPU_SR_Restore
;;;834            return (OS_TASK_NOT_EXIST);
000260  e3a0000b          MOV      r0,#0xb
                  |L1.612|
000264  e8bd41f0          POP      {r4-r8,lr}
;;;835        }
;;;836        if ((ptcb->OSTCBOpt & OS_TASK_OPT_STK_CHK) == 0) { /* Make sure stack checking option is set       */
;;;837            OS_EXIT_CRITICAL();
;;;838            return (OS_TASK_OPT_ERR);
;;;839        }
;;;840        free = 0;
;;;841        size = ptcb->OSTCBStkSize;
;;;842        pchk = ptcb->OSTCBStkBottom;
;;;843        OS_EXIT_CRITICAL();
;;;844    #if OS_STK_GROWTH == 1
;;;845        while (*pchk++ == (OS_STK)0) {                    /* Compute the number of zero entries on the stk */
;;;846            free++;
;;;847        }
;;;848    #else
;;;849        while (*pchk-- == (OS_STK)0) {
;;;850            free++;
;;;851        }
;;;852    #endif
;;;853        p_stk_data->OSFree = free * sizeof(OS_STK);           /* Compute number of free bytes on the stack */
;;;854        p_stk_data->OSUsed = (size - free) * sizeof(OS_STK);  /* Compute number of bytes used on the stack */
;;;855        return (OS_NO_ERR);
;;;856    }
000268  e12fff1e          BX       lr
                  |L1.620|
00026c  e1d121b0          LDRH     r2,[r1,#0x10]         ;836
000270  e3120001          TST      r2,#1                 ;836
000274  1a000002          BNE      |L1.644|              ;836
000278  ebfffffe          BL       OS_CPU_SR_Restore     ;837
00027c  e3a00082          MOV      r0,#0x82              ;838
000280  eafffff7          B        |L1.612|              ;838
                  |L1.644|
000284  e2817008          ADD      r7,r1,#8              ;842
000288  e89700a0          LDM      r7,{r5,r7}            ;842
00028c  e3a04000          MOV      r4,#0                 ;840
000290  ebfffffe          BL       OS_CPU_SR_Restore     ;843
                  |L1.660|
000294  e4950004          LDR      r0,[r5],#4            ;845
000298  e3500000          CMP      r0,#0                 ;845
00029c  02844001          ADDEQ    r4,r4,#1              ;846
0002a0  0afffffb          BEQ      |L1.660|              ;846
0002a4  e1a00104          LSL      r0,r4,#2              ;853
0002a8  e5860000          STR      r0,[r6,#0]            ;853
0002ac  e0470004          SUB      r0,r7,r4              ;854
0002b0  e1a00100          LSL      r0,r0,#2              ;854
0002b4  e5860004          STR      r0,[r6,#4]            ;854
0002b8  e3a00000          MOV      r0,#0                 ;855
0002bc  eaffffe8          B        |L1.612|              ;855
                  |L1.704|
0002c0  00000000          DCD      OSIntNesting          ;855
                  |L1.708|
0002c4  00000000          DCD      OSTCBPrioTbl          ;855
                  |L1.712|
0002c8  00000000          DCD      OSRunning             ;855
                  |L1.716|
0002cc  00000000          DCD      OSTCBCur              ;855
                          ENDP


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -