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

📄 os_core.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                  |L1.1108|
000454  75432f4f          DCB      "uC/O"
000458  532d4949          DCB      "S-II"
00045c  20537461          DCB      " Sta"
000460  74000000          DCB      "t\0\0\0"
                  |L1.1124|
000464  00000340          DCD      ||.bss||+0x340
                  |L1.1128|
000468  75432f4f          DCB      "uC/O"
00046c  532d4949          DCB      "S-II"
000470  2049646c          DCB      " Idl"
000474  65000000          DCB      "e\0\0\0"
                  |L1.1144|
000478  00000000          DCD      ||.bss||
                  |L1.1148|
00047c  000005c0          DCD      ||.bss||+0x5c0
                  |L1.1152|
000480  00000000          DCD      ||.constdata||
                  |L1.1156|
000484  4628              MOV      r0,r5
000486  e8bde8bd          POP      {r4-r6,lr}
00048a  f7fff7ff          B.W      OS_CPU_SR_Restore
;;;1234   }
;;;1235   
                          ENDP

                  OSSchedUnlock PROC
;;;423    void  OSSchedUnlock (void)
;;;424    {
00048e  b510              PUSH     {r4,lr}
;;;425    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;;;426        OS_CPU_SR  cpu_sr = 0;
;;;427    #endif
;;;428    
;;;429    
;;;430    
;;;431        if (OSRunning == OS_TRUE) {                            /* Make sure multitasking is running        */
000490  4ce1              LDR      r4,|L1.2072|
000492  79e0              LDRB     r0,[r4,#7]  ; OSRunning
000494  2801              CMP      r0,#1
000496  d11a              BNE      |L1.1230|
;;;432            OS_ENTER_CRITICAL();
000498  f7fff7ff          BL       OS_CPU_SR_Save
;;;433            if (OSLockNesting > 0) {                           /* Do not decrement if already 0            */
00049c  78e1              LDRB     r1,[r4,#3]  ; OSLockNesting
00049e  b191              CBZ      r1,|L1.1222|
;;;434                OSLockNesting--;                               /* Decrement lock nesting level             */
0004a0  1e49              SUBS     r1,r1,#1
0004a2  b2c9              UXTB     r1,r1
0004a4  70e1              STRB     r1,[r4,#3]  ; OSLockNesting
;;;435                if (OSLockNesting == 0) {                      /* See if scheduler is enabled and ...      */
0004a6  b951              CBNZ     r1,|L1.1214|
;;;436                    if (OSIntNesting == 0) {                   /* ... not in an ISR                        */
0004a8  78a1              LDRB     r1,[r4,#2]  ; OSIntNesting
0004aa  b921              CBNZ     r1,|L1.1206|
;;;437                        OS_EXIT_CRITICAL();
0004ac  f7fff7ff          BL       OS_CPU_SR_Restore
;;;438                        OS_Sched();                            /* See if a HPT is ready                    */
0004b0  e8bde8bd          POP      {r4,lr}
0004b4  e7fe              B        OS_Sched
                  |L1.1206|
;;;439                    } else {
;;;440                        OS_EXIT_CRITICAL();
0004b6  e8bde8bd          POP      {r4,lr}
0004ba  f7fff7ff          B.W      OS_CPU_SR_Restore
                  |L1.1214|
;;;441                    }
;;;442                } else {
;;;443                    OS_EXIT_CRITICAL();
0004be  e8bde8bd          POP      {r4,lr}
0004c2  f7fff7ff          B.W      OS_CPU_SR_Restore
                  |L1.1222|
;;;444                }
;;;445            } else {
;;;446                OS_EXIT_CRITICAL();
0004c6  e8bde8bd          POP      {r4,lr}
0004ca  f7fff7ff          B.W      OS_CPU_SR_Restore
                  |L1.1230|
;;;447            }
;;;448        }
;;;449    }
0004ce  bd10              POP      {r4,pc}
;;;450    #endif
                          ENDP

                  OSStart PROC
;;;473    void  OSStart (void)
;;;474    {
0004d0  b510              PUSH     {r4,lr}
;;;475        if (OSRunning == OS_FALSE) {
0004d2  4cd1              LDR      r4,|L1.2072|
0004d4  79e0              LDRB     r0,[r4,#7]  ; OSRunning
0004d6  2800              CMP      r0,#0
0004d8  d10c              BNE      |L1.1268|
;;;476            OS_SchedNew();                               /* Find highest priority's task priority number   */
0004da  f7fff7ff          BL       OS_SchedNew
;;;477            OSPrioCur     = OSPrioHighRdy;
0004de  7960              LDRB     r0,[r4,#5]  ; OSPrioHighRdy
0004e0  7120              STRB     r0,[r4,#4]  ; OSPrioCur
;;;478            OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
0004e2  49ce              LDR      r1,|L1.2076|
0004e4  f851f851          LDR      r0,[r1,r0,LSL #2]
0004e8  62e0              STR      r0,[r4,#0x2c]  ; OSTCBHighRdy
;;;479            OSTCBCur      = OSTCBHighRdy;
0004ea  6260              STR      r0,[r4,#0x24]  ; OSTCBCur
;;;480            OSStartHighRdy();                            /* Execute target specific code to start task     */
0004ec  e8bde8bd          POP      {r4,lr}
0004f0  f7fff7ff          B.W      OSStartHighRdy
                  |L1.1268|
;;;481        }
;;;482    }
0004f4  bd10              POP      {r4,pc}
;;;483    /*$PAGE*/
                          ENDP

                  OSStatInit PROC
;;;505    void  OSStatInit (void)
;;;506    {
0004f6  b510              PUSH     {r4,lr}
;;;507    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;508        OS_CPU_SR  cpu_sr = 0;
;;;509    #endif
;;;510    
;;;511    
;;;512    
;;;513        OSTimeDly(2);                                /* Synchronize with clock tick                        */
0004f8  2002              MOVS     r0,#2
0004fa  f7fff7ff          BL       OSTimeDly
;;;514        OS_ENTER_CRITICAL();
0004fe  f7fff7ff          BL       OS_CPU_SR_Save
;;;515        OSIdleCtr    = 0L;                           /* Clear idle counter                                 */
000502  4cc5              LDR      r4,|L1.2072|
000504  2100              MOVS     r1,#0
000506  6221              STR      r1,[r4,#0x20]  ; OSIdleCtr
;;;516        OS_EXIT_CRITICAL();
000508  f7fff7ff          BL       OS_CPU_SR_Restore
;;;517        OSTimeDly(OS_TICKS_PER_SEC / 10);            /* Determine MAX. idle counter value for 1/10 second  */
00050c  200a              MOVS     r0,#0xa
00050e  f7fff7ff          BL       OSTimeDly
;;;518        OS_ENTER_CRITICAL();
000512  f7fff7ff          BL       OS_CPU_SR_Save
;;;519        OSIdleCtrMax = OSIdleCtr;                    /* Store maximum idle counter count in 1/10 second    */
000516  6a21              LDR      r1,[r4,#0x20]  ; OSIdleCtr
000518  6161              STR      r1,[r4,#0x14]  ; OSIdleCtrMax
;;;520        OSStatRdy    = OS_TRUE;
00051a  2101              MOVS     r1,#1
00051c  7061              STRB     r1,[r4,#1]  ; OSStatRdy
;;;521        OS_EXIT_CRITICAL();
00051e  e8bde8bd          POP      {r4,lr}
000522  f7fff7ff          B.W      OS_CPU_SR_Restore
;;;522    }
;;;523    #endif
                          ENDP

                  OSTimeTick PROC
;;;539    void  OSTimeTick (void)
;;;540    {
000526  e92de92d          PUSH     {r4-r8,lr}
;;;541        OS_TCB    *ptcb;
;;;542    #if OS_TICK_STEP_EN > 0
;;;543        BOOLEAN    step;
;;;544    #endif
;;;545    #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register     */
;;;546        OS_CPU_SR  cpu_sr = 0;
;;;547    #endif
;;;548    
;;;549    
;;;550    
;;;551    #if OS_TIME_TICK_HOOK_EN > 0
;;;552        OSTimeTickHook();                                      /* Call user definable hook                     */
00052a  f7fff7ff          BL       OSTimeTickHook
;;;553    #endif
;;;554    #if OS_TIME_GET_SET_EN > 0
;;;555        OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter               */
00052e  f7fff7ff          BL       OS_CPU_SR_Save
;;;556        OSTime++;
000532  4fb9              LDR      r7,|L1.2072|
000534  6b79              LDR      r1,[r7,#0x34]  ; OSTime
000536  1c49              ADDS     r1,r1,#1
000538  6379              STR      r1,[r7,#0x34]  ; OSTime
;;;557        OS_EXIT_CRITICAL();
00053a  f7fff7ff          BL       OS_CPU_SR_Restore
;;;558    #endif
;;;559        if (OSRunning == OS_TRUE) {
00053e  79f8              LDRB     r0,[r7,#7]  ; OSRunning
000540  2801              CMP      r0,#1
000542  d14a              BNE      |L1.1498|
;;;560    #if OS_TICK_STEP_EN > 0
;;;561            switch (OSTickStepState) {                         /* Determine whether we need to process a tick  */
000544  7a78              LDRB     r0,[r7,#9]  ; OSTickStepState
000546  2501              MOVS     r5,#1
000548  2600              MOVS     r6,#0
00054a  b130              CBZ      r0,|L1.1370|
00054c  2801              CMP      r0,#1
00054e  d006              BEQ      |L1.1374|
000550  2802              CMP      r0,#2
000552  d106              BNE      |L1.1378|
;;;562                case OS_TICK_STEP_DIS:                         /* Yes, stepping is disabled                    */
;;;563                     step = OS_TRUE;
;;;564                     break;
;;;565    
;;;566                case OS_TICK_STEP_WAIT:                        /* No,  waiting for uC/OS-View to set ...       */
;;;567                     step = OS_FALSE;                          /*      .. OSTickStepState to OS_TICK_STEP_ONCE */
;;;568                     break;
;;;569    
;;;570                case OS_TICK_STEP_ONCE:                        /* Yes, process tick once and wait for next ... */
;;;571                     step            = OS_TRUE;                /*      ... step command from uC/OS-View        */
000554  2001              MOVS     r0,#1
;;;572                     OSTickStepState = OS_TICK_STEP_WAIT;
000556  727d              STRB     r5,[r7,#9]  ; OSTickStepState
;;;573                     break;
000558  e005              B        |L1.1382|
                  |L1.1370|
00055a  2001              MOVS     r0,#1
00055c  e003              B        |L1.1382|
                  |L1.1374|
00055e  2000              MOVS     r0,#0
000560  e001              B        |L1.1382|
                  |L1.1378|
;;;574    
;;;575                default:                                       /* Invalid case, correct situation              */
;;;576                     step            = OS_TRUE;
000562  2001              MOVS     r0,#1
;;;577                     OSTickStepState = OS_TICK_STEP_DIS;
000564  727e              STRB     r6,[r7,#9]  ; OSTickStepState
                  |L1.1382|
;;;578                     break;
;;;579            }
;;;580            if (step == OS_FALSE) {                            /* Return if waiting for step command           */
000566  2800              CMP      r0,#0
000568  d037              BEQ      |L1.1498|
;;;581                return;
;;;582            }
;;;583    #endif
;;;584            ptcb = OSTCBList;                                  /* Point at first TCB in TCB list               */
00056a  6b3c              LDR      r4,[r7,#0x30]  ; OSTCBList
;;;585            while (ptcb->OSTCBPrio != OS_TASK_IDLE_PRIO) {     /* Go through all TCBs in TCB list              */
00056c  f894f894          LDRB     r0,[r4,#0x2e]
000570  281f              CMP      r0,#0x1f
000572  d032              BEQ      |L1.1498|
000574  f8dff8df          LDR      r8,|L1.2080|
                  |L1.1400|
;;;586                OS_ENTER_CRITICAL();
000578  f7fff7ff          BL       OS_CPU_SR_Save
;;;587                if (ptcb->OSTCBDly != 0) {                     /* No, Delayed or waiting for event with TO     */
00057c  8d61              LDRH     r1,[r4,#0x2a]
00057e  b329              CBZ      r1,|L1.1484|
;;;588                    if (--ptcb->OSTCBDly == 0) {               /* Decrement nbr of ticks to end of delay       */
000580  1e49              SUBS     r1,r1,#1
000582  0409              LSLS     r1,r1,#16
000584  0c09              LSRS     r1,r1,#16
000586  8561              STRH     r1,[r4,#0x2a]
000588  d120              BNE      |L1.1484|
;;;589                                                               /* Check for timeout                            */
;;;590                        if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {
00058a  f894f894          LDRB     r1,[r4,#0x2c]
00058e  f011f011          TST      r1,#0x37
000592  d006              BEQ      |L1.1442|
;;;591                            ptcb->OSTCBStat  &= ~(INT8U)OS_STAT_PEND_ANY;          /* Yes, Clear status flag   */
000594  f021f021          BIC      r1,r1,#0x37
000598  f884f884          STRB     r1,[r4,#0x2c]
;;;592                            ptcb->OSTCBStatPend = OS_STAT_PEND_TO;                 /* Indicate PEND timeout    */
00059c  f884f884          STRB     r5,[r4,#0x2d]
0005a0  e001              B        |L1.1446|
                  |L1.1442|
;;;593                        } else {
;;;594                            ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
0005a2  f884f884          STRB     r6,[r4,#0x2d]
                  |L1.1446|
;;;595                        }
;;;596    
;;;597                        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {  /* Is task suspended?       */
0005a6  f894f894          LDRB     r1,[r4,#0x2c]
0005aa  f011f011          TST      r1,#8
0005ae  d10d              BNE      |L1.1484|
;;;598                            OSRdyGrp               |= ptc

⌨️ 快捷键说明

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