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

📄 os_task.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;164    
;;;165    #if OS_ARG_CHK_EN > 0
;;;166        if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
0001e4  e357000c          CMP      r7,#0xc
0001e8  da000001          BLE      |L1.500|
;;;167            return (OS_PRIO_INVALID);
0001ec  e3a0002a          MOV      r0,#0x2a
;;;168        }
;;;169    #endif
;;;170        OS_ENTER_CRITICAL();
;;;171        if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority  */
;;;172            OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* Reserve the priority to prevent others from doing ...  */
;;;173                                                 /* ... the same thing until task is created.              */
;;;174            OS_EXIT_CRITICAL();
;;;175            psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, 0);    /* Initialize the task's stack         */
;;;176            err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);
;;;177            if (err == OS_NO_ERR) {
;;;178                OS_ENTER_CRITICAL();
;;;179                OSTaskCtr++;                                        /* Increment the #tasks counter        */
;;;180                OS_EXIT_CRITICAL();
;;;181                if (OSRunning == TRUE) {         /* Find highest priority task if multitasking has started */
;;;182                    OS_Sched();
;;;183                }
;;;184            } else {
;;;185                OS_ENTER_CRITICAL();
;;;186                OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others                 */
;;;187                OS_EXIT_CRITICAL();
;;;188            }
;;;189            return (err);
;;;190        }
;;;191        OS_EXIT_CRITICAL();
;;;192        return (OS_PRIO_EXIST);
;;;193    }
                  |L1.496|
0001f0  e8bd83fe          POP      {r1-r9,pc}
                  |L1.500|
0001f4  ef000002          SVC      0x2  ; formerly SWI   ;170
0001f8  e59f055c          LDR      r0,|L1.1884|          ;171
0001fc  e7900107          LDR      r0,[r0,r7,LSL #2]     ;171
000200  e3500000          CMP      r0,#0                 ;171
000204  1a000028          BNE      |L1.684|              ;171
000208  e3a00001          MOV      r0,#1                 ;172
00020c  e59f1548          LDR      r1,|L1.1884|          ;172
000210  e7810107          STR      r0,[r1,r7,LSL #2]     ;172
000214  ef000003          SVC      0x3  ; formerly SWI   ;174
000218  e3a03000          MOV      r3,#0                 ;175
00021c  e1a02006          MOV      r2,r6                 ;175
000220  e1a01005          MOV      r1,r5                 ;175
000224  e1a00004          MOV      r0,r4                 ;175
000228  ebfffffe          BL       OSTaskStkInit         ;175
00022c  e1a09000          MOV      r9,r0                 ;175
000230  e3a03000          MOV      r3,#0                 ;176
000234  e58d3000          STR      r3,[sp,#0]            ;176
000238  e58d3004          STR      r3,[sp,#4]            ;176
00023c  e58d3008          STR      r3,[sp,#8]            ;176
000240  e1a02003          MOV      r2,r3                 ;176
000244  e1a01009          MOV      r1,r9                 ;176
000248  e1a00007          MOV      r0,r7                 ;176
00024c  ebfffffe          BL       OS_TCBInit            ;176
000250  e1a08000          MOV      r8,r0                 ;176
000254  e3580000          CMP      r8,#0                 ;177
000258  1a00000c          BNE      |L1.656|              ;177
00025c  ef000002          SVC      0x2  ; formerly SWI   ;178
000260  e59f0508          LDR      r0,|L1.1904|          ;179
000264  e5d00000          LDRB     r0,[r0,#0]            ;179  ; OSTaskCtr
000268  e2800001          ADD      r0,r0,#1              ;179
00026c  e59f14fc          LDR      r1,|L1.1904|          ;179
000270  e5c10000          STRB     r0,[r1,#0]            ;179  ; OSTaskCtr
000274  ef000003          SVC      0x3  ; formerly SWI   ;180
000278  e59f04f4          LDR      r0,|L1.1908|          ;181
00027c  e5d00000          LDRB     r0,[r0,#0]            ;181  ; OSRunning
000280  e3500001          CMP      r0,#1                 ;181
000284  1a000006          BNE      |L1.676|              ;181
000288  ebfffffe          BL       OS_Sched              ;182
00028c  ea000004          B        |L1.676|              ;182
                  |L1.656|
000290  ef000002          SVC      0x2  ; formerly SWI   ;185
000294  e3a00000          MOV      r0,#0                 ;186
000298  e59f14bc          LDR      r1,|L1.1884|          ;186
00029c  e7810107          STR      r0,[r1,r7,LSL #2]     ;186
0002a0  ef000003          SVC      0x3  ; formerly SWI   ;187
                  |L1.676|
0002a4  e1a00008          MOV      r0,r8                 ;189
0002a8  eaffffd0          B        |L1.496|              ;189
                  |L1.684|
0002ac  ef000003          SVC      0x3  ; formerly SWI   ;191
0002b0  e3a00028          MOV      r0,#0x28              ;192
0002b4  eaffffcd          B        |L1.496|              ;192
                          ENDP

                  OSTaskDel PROC
;;;355    INT8U  OSTaskDel (INT8U prio)
;;;356    {
0002b8  e92d41f0          PUSH     {r4-r8,lr}
0002bc  e1a04000          MOV      r4,r0
;;;357    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;358        OS_CPU_SR     cpu_sr;
;;;359    #endif
;;;360    
;;;361    #if OS_EVENT_EN > 0
;;;362        OS_EVENT     *pevent;
;;;363    #endif    
;;;364    #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;365        OS_FLAG_NODE *pnode;
;;;366    #endif
;;;367        OS_TCB       *ptcb;
;;;368    
;;;369    
;;;370    
;;;371        if (OSIntNesting > 0) {                                     /* See if trying to delete from ISR    */
0002c0  e59f04b0          LDR      r0,|L1.1912|
0002c4  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0002c8  e3500000          CMP      r0,#0
0002cc  da000001          BLE      |L1.728|
;;;372            return (OS_TASK_DEL_ISR);
0002d0  e3a0003f          MOV      r0,#0x3f
;;;373        }
;;;374    #if OS_ARG_CHK_EN > 0
;;;375        if (prio == OS_IDLE_PRIO) {                                 /* Not allowed to delete idle task     */
;;;376            return (OS_TASK_DEL_IDLE);
;;;377        }
;;;378        if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {       /* Task priority valid ?               */
;;;379            return (OS_PRIO_INVALID);
;;;380        }
;;;381    #endif
;;;382        OS_ENTER_CRITICAL();
;;;383        if (prio == OS_PRIO_SELF) {                                 /* See if requesting to delete self    */
;;;384            prio = OSTCBCur->OSTCBPrio;                             /* Set priority to delete to current   */
;;;385        }
;;;386        if ((ptcb = OSTCBPrioTbl[prio]) != (OS_TCB *)0) {                /* Task to delete must exist      */
;;;387            if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) {  /* Make task not ready            */
;;;388                OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;389            }
;;;390    #if OS_EVENT_EN > 0
;;;391            pevent = ptcb->OSTCBEventPtr;
;;;392            if (pevent != (OS_EVENT *)0) {                          /* If task is waiting on event         */
;;;393                if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) { /* ... remove task from */
;;;394                    pevent->OSEventGrp &= ~ptcb->OSTCBBitY;                        /* ... event ctrl block */
;;;395                }
;;;396            }
;;;397    #endif
;;;398    #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;399            pnode = ptcb->OSTCBFlagNode;
;;;400            if (pnode != (OS_FLAG_NODE *)0) {                       /* If task is waiting on event flag    */
;;;401                OS_FlagUnlink(pnode);                               /* Remove from wait list               */
;;;402            }
;;;403    #endif
;;;404            ptcb->OSTCBDly  = 0;                                    /* Prevent OSTimeTick() from updating  */
;;;405            ptcb->OSTCBStat = OS_STAT_RDY;                          /* Prevent task from being resumed     */
;;;406    		if (OSLockNesting < 255) {
;;;407                OSLockNesting++;
;;;408    		}
;;;409            OS_EXIT_CRITICAL();                                     /* Enabling INT. ignores next instruc. */
;;;410            OS_Dummy();                                             /* ... Dummy ensures that INTs will be */
;;;411            OS_ENTER_CRITICAL();                                    /* ... disabled HERE!                  */
;;;412    		if (OSLockNesting > 0) {
;;;413                OSLockNesting--;
;;;414    		}
;;;415            OSTaskDelHook(ptcb);                                    /* Call user defined hook              */
;;;416            OSTaskCtr--;                                            /* One less task being managed         */
;;;417            OSTCBPrioTbl[prio] = (OS_TCB *)0;                       /* Clear old priority entry            */
;;;418            if (ptcb->OSTCBPrev == (OS_TCB *)0) {                   /* Remove from TCB chain               */
;;;419                ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
;;;420                OSTCBList                  = ptcb->OSTCBNext;
;;;421            } else {
;;;422                ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
;;;423                ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
;;;424            }
;;;425            ptcb->OSTCBNext = OSTCBFreeList;                        /* Return TCB to free TCB list         */
;;;426            OSTCBFreeList   = ptcb;
;;;427            OS_EXIT_CRITICAL();
;;;428            OS_Sched();                                             /* Find new highest priority task      */
;;;429            return (OS_NO_ERR);
;;;430        }
;;;431        OS_EXIT_CRITICAL();
;;;432        return (OS_TASK_DEL_ERR);
;;;433    }
                  |L1.724|
0002d4  e8bd81f0          POP      {r4-r8,pc}
                  |L1.728|
0002d8  e354000c          CMP      r4,#0xc               ;375
0002dc  1a000001          BNE      |L1.744|              ;375
0002e0  e3a0003d          MOV      r0,#0x3d              ;376
0002e4  eafffffa          B        |L1.724|              ;376
                  |L1.744|
0002e8  e354000c          CMP      r4,#0xc               ;378
0002ec  ba000003          BLT      |L1.768|              ;378
0002f0  e35400ff          CMP      r4,#0xff              ;378
0002f4  0a000001          BEQ      |L1.768|              ;378
0002f8  e3a0002a          MOV      r0,#0x2a              ;379
0002fc  eafffff4          B        |L1.724|              ;379
                  |L1.768|
000300  ef000002          SVC      0x2  ; formerly SWI   ;382
000304  e35400ff          CMP      r4,#0xff              ;383
000308  1a000002          BNE      |L1.792|              ;383
00030c  e59f0450          LDR      r0,|L1.1892|          ;384
000310  e5900000          LDR      r0,[r0,#0]            ;384  ; OSTCBCur
000314  e5d0401d          LDRB     r4,[r0,#0x1d]         ;384
                  |L1.792|
000318  e59f043c          LDR      r0,|L1.1884|          ;386
00031c  e7907104          LDR      r7,[r0,r4,LSL #2]     ;386
000320  e3570000          CMP      r7,#0                 ;386
000324  0a00005f          BEQ      |L1.1192|             ;386
000328  e5d7001f          LDRB     r0,[r7,#0x1f]         ;387
00032c  e59f1434          LDR      r1,|L1.1896|          ;387
000330  e7d10000          LDRB     r0,[r1,r0]            ;387
000334  e5d71020          LDRB     r1,[r7,#0x20]         ;387
000338  e1c00001          BIC      r0,r0,r1              ;387
00033c  e21000ff          ANDS     r0,r0,#0xff           ;387
000340  e5d7101f          LDRB     r1,[r7,#0x1f]         ;387
000344  e59f241c          LDR      r2,|L1.1896|          ;387
000348  e7c20001          STRB     r0,[r2,r1]            ;387
00034c  1a000005          BNE      |L1.872|              ;387
000350  e5d70021          LDRB     r0,[r7,#0x21]         ;388
000354  e59f1410          LDR      r1,|L1.1900|          ;388
000358  e5d11000          LDRB     r1,[r1,#0]            ;388  ; OSRdyGrp
00035c  e1c10000          BIC      r0,r1,r0              ;388
000360  e59f1404          LDR      r1,|L1.1900|          ;388
000364  e5c10000          STRB     r0,[r1,#0]            ;388  ; OSRdyGrp
                  |L1.872|
000368  e597500c          LDR      r5,[r7,#0xc]          ;391
00036c  e3550000          CMP      r5,#0                 ;392
000370  0a00000d          BEQ      |L1.940|              ;392
000374  e5d7001f          LDRB     r0,[r7,#0x1f]         ;393
000378  e2851008          ADD      r1,r5,#8              ;393

⌨️ 快捷键说明

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