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

📄 os_task.txt

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
0004d4  e78d              B        |L1.1010|
                  |L1.1238|
0004d6  4639              MOV      r1,r7                 ;764
0004d8  f105f105          ADD      r0,r5,#0x4c           ;764
0004dc  f7fff7ff          BL       OS_StrCopy
0004e0  4630              MOV      r0,r6                 ;765
0004e2  f7fff7ff          BL       OS_CPU_SR_Restore
0004e6  2000              MOVS     r0,#0                 ;766
0004e8  7020              STRB     r0,[r4,#0]            ;766
0004ea  e782              B        |L1.1010|
;;;768    #endif
                          ENDP

                  OSTaskResume PROC
;;;790    INT8U  OSTaskResume (INT8U prio)
;;;791    {
0004ec  b510              PUSH     {r4,lr}
0004ee  4604              MOV      r4,r0
;;;792        OS_TCB    *ptcb;
;;;793    #if OS_CRITICAL_METHOD == 3                                   /* Storage for CPU status register       */
;;;794        OS_CPU_SR  cpu_sr = 0;
;;;795    #endif
;;;796    
;;;797    
;;;798    
;;;799    #if OS_ARG_CHK_EN > 0
;;;800        if (prio >= OS_LOWEST_PRIO) {                             /* Make sure task priority is valid      */
;;;801            return (OS_ERR_PRIO_INVALID);
;;;802        }
;;;803    #endif
;;;804        OS_ENTER_CRITICAL();
0004f0  f7fff7ff          BL       OS_CPU_SR_Save
;;;805        ptcb = OSTCBPrioTbl[prio];
0004f4  496a              LDR      r1,|L1.1696|
0004f6  f851f851          LDR      r1,[r1,r4,LSL #2]
;;;806        if (ptcb == (OS_TCB *)0) {                                /* Task to suspend must exist            */
0004fa  b919              CBNZ     r1,|L1.1284|
;;;807            OS_EXIT_CRITICAL();
0004fc  f7fff7ff          BL       OS_CPU_SR_Restore
;;;808            return (OS_ERR_TASK_RESUME_PRIO);
000500  2046              MOVS     r0,#0x46
;;;809        }
;;;810        if (ptcb == OS_TCB_RESERVED) {                            /* See if assigned to Mutex              */
;;;811            OS_EXIT_CRITICAL();
;;;812            return (OS_ERR_TASK_NOT_EXIST);
;;;813        }
;;;814        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended                */
;;;815            ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND;           /* Remove suspension                     */
;;;816            if (ptcb->OSTCBStat == OS_STAT_RDY) {                 /* See if task is now ready              */
;;;817                if (ptcb->OSTCBDly == 0) {
;;;818                    OSRdyGrp               |= ptcb->OSTCBBitY;    /* Yes, Make task ready to run           */
;;;819                    OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
;;;820                    OS_EXIT_CRITICAL();
;;;821                    if (OSRunning == OS_TRUE) {
;;;822                        OS_Sched();                               /* Find new highest priority task        */
;;;823                    }
;;;824                } else {
;;;825                    OS_EXIT_CRITICAL();
;;;826                }
;;;827            } else {                                              /* Must be pending on event              */
;;;828                OS_EXIT_CRITICAL();
;;;829            }
;;;830            return (OS_ERR_NONE);
;;;831        }
;;;832        OS_EXIT_CRITICAL();
;;;833        return (OS_ERR_TASK_NOT_SUSPENDED);
;;;834    }
000502  bd10              POP      {r4,pc}
                  |L1.1284|
000504  2901              CMP      r1,#1                 ;810
000506  d103              BNE      |L1.1296|
000508  f7fff7ff          BL       OS_CPU_SR_Restore
00050c  2043              MOVS     r0,#0x43              ;812
00050e  bd10              POP      {r4,pc}
                  |L1.1296|
000510  f891f891          LDRB     r2,[r1,#0x30]         ;814
000514  0713              LSLS     r3,r2,#28             ;814
000516  d524              BPL      |L1.1378|
000518  f022f022          BIC      r2,r2,#8              ;815
00051c  f881f881          STRB     r2,[r1,#0x30]         ;815
000520  f891f891          LDRB     r2,[r1,#0x30]         ;816
000524  b9ca              CBNZ     r2,|L1.1370|
000526  8dca              LDRH     r2,[r1,#0x2e]         ;817
000528  b9a2              CBNZ     r2,|L1.1364|
00052a  4b5f              LDR      r3,|L1.1704|
00052c  3134              ADDS     r1,r1,#0x34           ;818
00052e  788a              LDRB     r2,[r1,#2]            ;818
000530  781c              LDRB     r4,[r3,#0]            ;818  ; OSRdyGrp
000532  4322              ORRS     r2,r2,r4              ;818
000534  701a              STRB     r2,[r3,#0]            ;818  ; OSRdyGrp
000536  780a              LDRB     r2,[r1,#0]            ;819
000538  4b5c              LDR      r3,|L1.1708|
00053a  7849              LDRB     r1,[r1,#1]            ;819
00053c  5c9c              LDRB     r4,[r3,r2]            ;819
00053e  430c              ORRS     r4,r4,r1              ;819
000540  549c              STRB     r4,[r3,r2]            ;819
000542  f7fff7ff          BL       OS_CPU_SR_Restore
000546  485a              LDR      r0,|L1.1712|
000548  7800              LDRB     r0,[r0,#0]            ;821  ; OSRunning
00054a  2801              CMP      r0,#1                 ;821
00054c  d107              BNE      |L1.1374|
00054e  f7fff7ff          BL       OS_Sched
000552  e004              B        |L1.1374|
                  |L1.1364|
000554  f7fff7ff          BL       OS_CPU_SR_Restore
000558  e001              B        |L1.1374|
                  |L1.1370|
00055a  f7fff7ff          BL       OS_CPU_SR_Restore
                  |L1.1374|
00055e  2000              MOVS     r0,#0                 ;830
000560  bd10              POP      {r4,pc}
                  |L1.1378|
000562  f7fff7ff          BL       OS_CPU_SR_Restore
000566  2044              MOVS     r0,#0x44              ;833
000568  bd10              POP      {r4,pc}
;;;835    #endif
                          ENDP

                  OSTaskStkChk PROC
;;;857    INT8U  OSTaskStkChk (INT8U prio, OS_STK_DATA *p_stk_data)
;;;858    {
00056a  e92de92d          PUSH     {r4-r8,lr}
00056e  4604              MOV      r4,r0
000570  460e              MOV      r6,r1
;;;859        OS_TCB    *ptcb;
;;;860        OS_STK    *pchk;
;;;861        INT32U     nfree;
;;;862        INT32U     size;
;;;863    #if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
;;;864        OS_CPU_SR  cpu_sr = 0;
;;;865    #endif
;;;866    
;;;867    
;;;868    
;;;869    #if OS_ARG_CHK_EN > 0
;;;870        if (prio > OS_LOWEST_PRIO) {                       /* Make sure task priority is valid             */
;;;871            if (prio != OS_PRIO_SELF) {
;;;872                return (OS_ERR_PRIO_INVALID);
;;;873            }
;;;874        }
;;;875        if (p_stk_data == (OS_STK_DATA *)0) {              /* Validate 'p_stk_data'                        */
;;;876            return (OS_ERR_PDATA_NULL);
;;;877        }
;;;878    #endif
;;;879        p_stk_data->OSFree = 0;                            /* Assume failure, set to 0 size                */
000572  2000              MOVS     r0,#0
000574  6030              STR      r0,[r6,#0]
;;;880        p_stk_data->OSUsed = 0;
000576  6070              STR      r0,[r6,#4]
;;;881        OS_ENTER_CRITICAL();
000578  f7fff7ff          BL       OS_CPU_SR_Save
;;;882        if (prio == OS_PRIO_SELF) {                        /* See if check for SELF                        */
00057c  2cff              CMP      r4,#0xff
00057e  d103              BNE      |L1.1416|
;;;883            prio = OSTCBCur->OSTCBPrio;
000580  4946              LDR      r1,|L1.1692|
000582  6809              LDR      r1,[r1,#0]  ; OSTCBCur
000584  f891f891          LDRB     r4,[r1,#0x32]
                  |L1.1416|
;;;884        }
;;;885        ptcb = OSTCBPrioTbl[prio];
000588  4945              LDR      r1,|L1.1696|
00058a  f851f851          LDR      r1,[r1,r4,LSL #2]
;;;886        if (ptcb == (OS_TCB *)0) {                         /* Make sure task exist                         */
00058e  b919              CBNZ     r1,|L1.1432|
;;;887            OS_EXIT_CRITICAL();
000590  f7fff7ff          BL       OS_CPU_SR_Restore
;;;888            return (OS_ERR_TASK_NOT_EXIST);
000594  2043              MOVS     r0,#0x43
;;;889        }
;;;890        if (ptcb == OS_TCB_RESERVED) {
;;;891            OS_EXIT_CRITICAL();
;;;892            return (OS_ERR_TASK_NOT_EXIST);
;;;893        }
;;;894        if ((ptcb->OSTCBOpt & OS_TASK_OPT_STK_CHK) == 0) { /* Make sure stack checking option is set       */
;;;895            OS_EXIT_CRITICAL();
;;;896            return (OS_ERR_TASK_OPT);
;;;897        }
;;;898        nfree = 0;
;;;899        size  = ptcb->OSTCBStkSize;
;;;900        pchk  = ptcb->OSTCBStkBottom;
;;;901        OS_EXIT_CRITICAL();
;;;902    #if OS_STK_GROWTH == 1
;;;903        while (*pchk++ == (OS_STK)0) {                    /* Compute the number of zero entries on the stk */
;;;904            nfree++;
;;;905        }
;;;906    #else
;;;907        while (*pchk-- == (OS_STK)0) {
;;;908            nfree++;
;;;909        }
;;;910    #endif
;;;911        p_stk_data->OSFree = nfree * sizeof(OS_STK);          /* Compute number of free bytes on the stack */
;;;912        p_stk_data->OSUsed = (size - nfree) * sizeof(OS_STK); /* Compute number of bytes used on the stack */
;;;913        return (OS_ERR_NONE);
;;;914    }
000596  e72c              B        |L1.1010|
                  |L1.1432|
000598  2901              CMP      r1,#1                 ;890
00059a  d103              BNE      |L1.1444|
00059c  f7fff7ff          BL       OS_CPU_SR_Restore
0005a0  2043              MOVS     r0,#0x43              ;892
0005a2  e726              B        |L1.1010|
                  |L1.1444|
0005a4  8a0a              LDRH     r2,[r1,#0x10]         ;894
0005a6  07d2              LSLS     r2,r2,#31             ;894
0005a8  d103              BNE      |L1.1458|
0005aa  f7fff7ff          BL       OS_CPU_SR_Restore
0005ae  2045              MOVS     r0,#0x45              ;896
0005b0  e71f              B        |L1.1010|
                  |L1.1458|
0005b2  2400              MOVS     r4,#0                 ;898
0005b4  68cf              LDR      r7,[r1,#0xc]          ;899
0005b6  688d              LDR      r5,[r1,#8]            ;900
0005b8  f7fff7ff          BL       OS_CPU_SR_Restore
0005bc  e000              B        |L1.1472|
                  |L1.1470|
0005be  1c64              ADDS     r4,r4,#1              ;904
                  |L1.1472|
0005c0  cd01              LDM      r5!,{r0}              ;903
0005c2  2800              CMP      r0,#0                 ;903
0005c4  d0fb              BEQ      |L1.1470|
0005c6  00a0              LSLS     r0,r4,#2              ;911
0005c8  6030              STR      r0,[r6,#0]            ;911
0005ca  1b38              SUBS     r0,r7,r4              ;912
0005cc  0080              LSLS     r0,r0,#2              ;912
0005ce  6070              STR      r0,[r6,#4]            ;912
0005d0  2000              MOVS     r0,#0                 ;913
0005d2  e70e              B        |L1.1010|
;;;915    #endif
                          ENDP

                  OSTaskSuspend PROC
;;;941    INT8U  OSTaskSuspend (INT8U prio)
;;;942    {
0005d4  b570              PUSH     {r4-r6,lr}
0005d6  4605              MOV      r5,r0
;;;943        BOOLEAN    self;
;;;944        OS_TCB    *ptcb;
;;;945        INT8U      y;
;;;946    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;947        OS_CPU_SR  cpu_sr = 0;
;;;948    #endif
;;;949    
;;;950    
;;;951    
;;;952    #if OS_ARG_CHK_EN > 0
;;;953        if (prio == OS_TASK_IDLE_PRIO) {                            /* Not allowed to suspend idle task    */
;;;954            return (OS_ERR_TASK_SUSPEND_IDLE);
;;;955        }
;;;956        if (prio >= OS_LOWEST_PRIO) {                               /* Task priority valid ?               */
;;;957            if (prio != OS_PRIO_SELF) {
;;;958                return (OS_ERR_

⌨️ 快捷键说明

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