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

📄 os_task.txt

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000272  4866              LDR      r0,|L1.1036|
000274  7800              LDRB     r0,[r0,#0]  ; OSIntNesting
000276  b110              CBZ      r0,|L1.638|
;;;433            return (OS_ERR_TASK_DEL_ISR);
000278  2040              MOVS     r0,#0x40
                  |L1.634|
;;;434        }
;;;435        if (prio == OS_TASK_IDLE_PRIO) {                    /* Not allowed to delete idle task             */
;;;436            return (OS_ERR_TASK_DEL_IDLE);
;;;437        }
;;;438    #if OS_ARG_CHK_EN > 0
;;;439        if (prio >= OS_LOWEST_PRIO) {                       /* Task priority valid ?                       */
;;;440            if (prio != OS_PRIO_SELF) {
;;;441                return (OS_ERR_PRIO_INVALID);
;;;442            }
;;;443        }
;;;444    #endif
;;;445    
;;;446    /*$PAGE*/
;;;447        OS_ENTER_CRITICAL();
;;;448        if (prio == OS_PRIO_SELF) {                         /* See if requesting to delete self            */
;;;449            prio = OSTCBCur->OSTCBPrio;                     /* Set priority to delete to current           */
;;;450        }
;;;451        ptcb = OSTCBPrioTbl[prio];
;;;452        if (ptcb == (OS_TCB *)0) {                          /* Task to delete must exist                   */
;;;453            OS_EXIT_CRITICAL();
;;;454            return (OS_ERR_TASK_NOT_EXIST);
;;;455        }
;;;456        if (ptcb == OS_TCB_RESERVED) {                      /* Must not be assigned to Mutex               */
;;;457            OS_EXIT_CRITICAL();
;;;458            return (OS_ERR_TASK_DEL);
;;;459        }
;;;460    
;;;461        OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX;
;;;462        if (OSRdyTbl[ptcb->OSTCBY] == 0) {                  /* Make task not ready                         */
;;;463            OSRdyGrp           &= ~ptcb->OSTCBBitY;
;;;464        }
;;;465        
;;;466    #if (OS_EVENT_EN)
;;;467        if (ptcb->OSTCBEventPtr != (OS_EVENT *)0) {
;;;468            OS_EventTaskRemove(ptcb, ptcb->OSTCBEventPtr);  /* Remove this task from any event   wait list */
;;;469        }
;;;470    #if (OS_EVENT_MULTI_EN > 0)
;;;471        if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) {   /* Remove this task from any events' wait lists*/
;;;472            OS_EventTaskRemoveMulti(ptcb, ptcb->OSTCBEventMultiPtr);
;;;473        }
;;;474    #endif
;;;475    #endif
;;;476    
;;;477    #if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;478        pnode = ptcb->OSTCBFlagNode;
;;;479        if (pnode != (OS_FLAG_NODE *)0) {                   /* If task is waiting on event flag            */
;;;480            OS_FlagUnlink(pnode);                           /* Remove from wait list                       */
;;;481        }
;;;482    #endif
;;;483    
;;;484        ptcb->OSTCBDly      = 0;                            /* Prevent OSTimeTick() from updating          */
;;;485        ptcb->OSTCBStat     = OS_STAT_RDY;                  /* Prevent task from being resumed             */
;;;486        ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
;;;487        if (OSLockNesting < 255u) {                         /* Make sure we don't context switch           */
;;;488            OSLockNesting++;
;;;489        }
;;;490        OS_EXIT_CRITICAL();                                 /* Enabling INT. ignores next instruc.         */
;;;491        OS_Dummy();                                         /* ... Dummy ensures that INTs will be         */
;;;492        OS_ENTER_CRITICAL();                                /* ... disabled HERE!                          */
;;;493        if (OSLockNesting > 0) {                            /* Remove context switch lock                  */
;;;494            OSLockNesting--;
;;;495        }
;;;496        OSTaskDelHook(ptcb);                                /* Call user defined hook                      */
;;;497        OSTaskCtr--;                                        /* One less task being managed                 */
;;;498        OSTCBPrioTbl[prio] = (OS_TCB *)0;                   /* Clear old priority entry                    */
;;;499        if (ptcb->OSTCBPrev == (OS_TCB *)0) {               /* Remove from TCB chain                       */
;;;500            ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
;;;501            OSTCBList                  = ptcb->OSTCBNext;
;;;502        } else {
;;;503            ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
;;;504            ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
;;;505        }
;;;506        ptcb->OSTCBNext   = OSTCBFreeList;                  /* Return TCB to free TCB list                 */
;;;507        OSTCBFreeList     = ptcb;
;;;508    #if OS_TASK_NAME_SIZE > 1
;;;509        ptcb->OSTCBTaskName[0] = '?';                       /* Unknown name                                */
;;;510        ptcb->OSTCBTaskName[1] = OS_ASCII_NUL;
;;;511    #endif
;;;512        OS_EXIT_CRITICAL();
;;;513        if (OSRunning == OS_TRUE) {
;;;514            OS_Sched();                                     /* Find new highest priority task              */
;;;515        }
;;;516        return (OS_ERR_NONE);
;;;517    }
00027a  e8bde8bd          POP      {r4-r10,pc}
                  |L1.638|
00027e  2d1f              CMP      r5,#0x1f              ;435
000280  d101              BNE      |L1.646|
000282  203e              MOVS     r0,#0x3e              ;436
000284  e7f9              B        |L1.634|
                  |L1.646|
000286  f7fff7ff          BL       OS_CPU_SR_Save
00028a  4606              MOV      r6,r0                 ;447
00028c  2dff              CMP      r5,#0xff              ;448
00028e  d103              BNE      |L1.664|
000290  485a              LDR      r0,|L1.1020|
000292  6800              LDR      r0,[r0,#0]            ;449  ; OSTCBCur
000294  f890f890          LDRB     r5,[r0,#0x32]         ;449
                  |L1.664|
000298  4f57              LDR      r7,|L1.1016|
00029a  f857f857          LDR      r4,[r7,r5,LSL #2]     ;451
00029e  b924              CBNZ     r4,|L1.682|
0002a0  4630              MOV      r0,r6                 ;453
0002a2  f7fff7ff          BL       OS_CPU_SR_Restore
0002a6  2043              MOVS     r0,#0x43              ;454
0002a8  e7e7              B        |L1.634|
                  |L1.682|
0002aa  2c01              CMP      r4,#1                 ;456
0002ac  d104              BNE      |L1.696|
0002ae  4630              MOV      r0,r6                 ;457
0002b0  f7fff7ff          BL       OS_CPU_SR_Restore
0002b4  203d              MOVS     r0,#0x3d              ;458
0002b6  e7e0              B        |L1.634|
                  |L1.696|
0002b8  f814f814          LDRB     r0,[r4,#0x34]!        ;461
0002bc  4950              LDR      r1,|L1.1024|
0002be  7863              LDRB     r3,[r4,#1]            ;461
0002c0  5c0a              LDRB     r2,[r1,r0]            ;461
0002c2  439a              BICS     r2,r2,r3              ;461
0002c4  540a              STRB     r2,[r1,r0]            ;461
0002c6  f814f814          LDRB     r0,[r4],#-0x34        ;462
0002ca  5c08              LDRB     r0,[r1,r0]            ;462
0002cc  b928              CBNZ     r0,|L1.730|
0002ce  494d              LDR      r1,|L1.1028|
0002d0  f894f894          LDRB     r2,[r4,#0x36]         ;463
0002d4  7808              LDRB     r0,[r1,#0]            ;463  ; OSRdyGrp
0002d6  4390              BICS     r0,r0,r2              ;463
0002d8  7008              STRB     r0,[r1,#0]            ;463  ; OSRdyGrp
                  |L1.730|
0002da  69e1              LDR      r1,[r4,#0x1c]         ;467
0002dc  b111              CBZ      r1,|L1.740|
0002de  4620              MOV      r0,r4                 ;468
0002e0  f7fff7ff          BL       OS_EventTaskRemove
                  |L1.740|
0002e4  6a21              LDR      r1,[r4,#0x20]         ;471
0002e6  b111              CBZ      r1,|L1.750|
0002e8  4620              MOV      r0,r4                 ;472
0002ea  f7fff7ff          BL       OS_EventTaskRemoveMulti
                  |L1.750|
0002ee  6aa0              LDR      r0,[r4,#0x28]         ;478
0002f0  b108              CBZ      r0,|L1.758|
0002f2  f7fff7ff          BL       OS_FlagUnlink
                  |L1.758|
0002f6  f04ff04f          MOV      r8,#0                 ;484
0002fa  f8a4f8a4          STRH     r8,[r4,#0x2e]         ;484
0002fe  f884f884          STRB     r8,[r4,#0x30]         ;485
000302  f884f884          STRB     r8,[r4,#0x31]         ;486
000306  f8dff8df          LDR      r9,|L1.1040|
00030a  f899f899          LDRB     r0,[r9,#0]            ;487  ; OSLockNesting
00030e  28ff              CMP      r0,#0xff              ;487
000310  d202              BCS      |L1.792|
000312  1c40              ADDS     r0,r0,#1              ;488
000314  f889f889          STRB     r0,[r9,#0]            ;488  ; OSLockNesting
                  |L1.792|
000318  4630              MOV      r0,r6                 ;490
00031a  f7fff7ff          BL       OS_CPU_SR_Restore
00031e  f7fff7ff          BL       OS_Dummy
000322  f7fff7ff          BL       OS_CPU_SR_Save
000326  4606              MOV      r6,r0                 ;492
000328  f899f899          LDRB     r1,[r9,#0]            ;493  ; OSLockNesting
00032c  b111              CBZ      r1,|L1.820|
00032e  1e49              SUBS     r1,r1,#1              ;494
000330  f889f889          STRB     r1,[r9,#0]            ;494  ; OSLockNesting
                  |L1.820|
000334  4620              MOV      r0,r4                 ;496
000336  f7fff7ff          BL       OSTaskDelHook
00033a  4936              LDR      r1,|L1.1044|
00033c  7808              LDRB     r0,[r1,#0]            ;497  ; OSTaskCtr
00033e  1e40              SUBS     r0,r0,#1              ;497
000340  7008              STRB     r0,[r1,#0]            ;497  ; OSTaskCtr
000342  f847f847          STR      r8,[r7,r5,LSL #2]     ;498
000346  69a1              LDR      r1,[r4,#0x18]         ;499
000348  b931              CBNZ     r1,|L1.856|
00034a  6960              LDR      r0,[r4,#0x14]         ;500
00034c  f8c0f8c0          STR      r8,[r0,#0x18]         ;500
000350  4931              LDR      r1,|L1.1048|
000352  6960              LDR      r0,[r4,#0x14]         ;501
000354  6008              STR      r0,[r1,#0]            ;501  ; OSTCBList
000356  e004              B        |L1.866|
                  |L1.856|
000358  6960              LDR      r0,[r4,#0x14]         ;503
00035a  6148              STR      r0,[r1,#0x14]         ;503
00035c  e9d4e9d4          LDRD     r1,r0,[r4,#0x14]      ;504
000360  6188              STR      r0,[r1,#0x18]         ;504
                  |L1.866|
000362  482e              LDR      r0,|L1.1052|
000364  6801              LDR      r1,[r0,#0]            ;506  ; OSTCBFreeList
000366  6161              STR      r1,[r4,#0x14]         ;506
000368  6004              STR      r4,[r0,#0]            ;507  ; OSTCBFreeList
00036a  203f              MOVS     r0,#0x3f              ;509
00036c  f884f884          STRB     r0,[r4,#0x4c]         ;509
000370  f884f884          STRB     r8,[r4,#0x4d]         ;510
000374  4630              MOV      r0,r6                 ;512
000376  f7fff7ff          BL       OS_CPU_SR_Restore
00037a  4823              LDR      r0,|L1.1032|
00037c  7800              LDRB     r0,[r0,#0]            ;513  ; OSRunning
00037e  2801              CMP      r0,#1                 ;513
000380  d101              BNE      |L1.902|
000382  f7fff7ff          BL       OS_Sched
                  |L1.902|
000386  2000              MOVS     r0,#0                 ;516
000388  e777              B        |L1.634|
;;;518    #endif
                          ENDP

                  OSTaskDelReq PROC
;;;567    INT8U  OSTaskDelReq (INT8U prio)
;;;568    {
00038a  b510              PUSH     {r4,lr}
00038c  4604              MOV      r4,r0
;;;569        INT8U      stat;
;;;570        OS_TCB    *ptcb;
;;;571    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;572        OS_CPU_SR  cpu_sr = 0;
;;;573    #endif
;;;574    
;;;575    
;;;576    
;;;577        if (prio == OS_TASK_IDLE_PRIO) {                            /* Not allowed to delete idle task     */
00038e  2c1f              CMP      r4,#0x1f
000390  d101              BNE      |L1.918|
;;;578            return (OS_ERR_TASK_DEL_IDLE);
000392  203e              MOVS     r0,#0x3e
;;;579        }
;;;580    #if OS_ARG_CHK_EN > 0
;;;581        if (prio >= OS_LOWEST_PRIO) {                               /* Task priority valid ?               */
;;;582            if (prio != OS_PRIO_SELF) {
;;;583                return (OS_ERR_PRIO_INVALID);
;;;584            }
;;;585        }
;;;586    #endif
;;;587        if (prio == OS_PRIO_SELF) {                                 /* See if a task is requesting to ...  */
;;;588            OS_ENTER_CRITICAL();                                    /* ... this task to delete itself      */
;;;589            stat = OSTCBCur->OSTCBDelReq;                           /* Return request status to caller     */
;;;590            OS_EXIT_CRITICAL();
;;;591            return (stat);
;;;592        }
;;;593        OS_ENTER_CRITICAL();
;;;594        ptcb = OSTCBPrioTbl[prio];
;;;595        if (ptcb == (OS_TCB *)0) {                                  /* Task to delete must exist           */
;;;596            OS_EXIT_CRITICAL();
;;;597            return (OS_ERR_TASK_NOT_EXIST);                         /* Task must already be deleted        */
;;;598        }
;;;599        if (ptcb == OS_TCB_RESERVED) {                              /* Must NOT be assigned to a Mutex     */
;;;600            OS_EXIT_CRITICAL();
;;;601            return (OS_ERR_TASK_DEL);
;;;602        }
;;;603        ptcb->OSTCBDelReq = OS_ERR_TASK_DEL_REQ;                    /* Set flag indicating task to be DEL. */
;;;604        OS_EXIT_CRITICAL();
;;;605        return (OS_ERR_NONE);

⌨️ 快捷键说明

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