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

📄 os_core.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;1467       OS_TCB      *ptcb;
;;;1468       OS_STK_DATA  stk_data;
;;;1469       INT8U        err;
;;;1470       INT8U        prio;
;;;1471   
;;;1472   
;;;1473       for (prio = 0; prio <= OS_TASK_IDLE_PRIO; prio++) {
000132  2400              MOVS     r4,#0
000134  4dc5              LDR      r5,|L1.1100|
                  |L1.310|
;;;1474           err = OSTaskStkChk(prio, &stk_data);
000136  a901              ADD      r1,sp,#4
000138  4620              MOV      r0,r4
00013a  f7fff7ff          BL       OSTaskStkChk
;;;1475           if (err == OS_ERR_NONE) {
00013e  b958              CBNZ     r0,|L1.344|
;;;1476               ptcb = OSTCBPrioTbl[prio];
000140  f855f855          LDR      r0,[r5,r4,LSL #2]
;;;1477               if (ptcb != (OS_TCB *)0) {                               /* Make sure task 'ptcb' is ...   */
000144  b140              CBZ      r0,|L1.344|
000146  2801              CMP      r0,#1
;;;1478                   if (ptcb != OS_TCB_RESERVED) {                       /* ... still valid.               */
000148  d006              BEQ      |L1.344|
00014a  68c2              LDR      r2,[r0,#0xc]
00014c  6881              LDR      r1,[r0,#8]
00014e  eb01eb01          ADD      r1,r1,r2,LSL #2
;;;1479   #if OS_TASK_PROFILE_EN > 0
;;;1480                       #if OS_STK_GROWTH == 1
;;;1481                       ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom + ptcb->OSTCBStkSize;
000152  6401              STR      r1,[r0,#0x40]
000154  9902              LDR      r1,[sp,#8]
;;;1482                       #else
;;;1483                       ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom - ptcb->OSTCBStkSize;
;;;1484                       #endif
;;;1485                       ptcb->OSTCBStkUsed = stk_data.OSUsed;            /* Store the number of bytes used */
000156  6441              STR      r1,[r0,#0x44]
                  |L1.344|
000158  1c60              ADDS     r0,r4,#1
00015a  b2c4              UXTB     r4,r0
00015c  2c1f              CMP      r4,#0x1f
00015e  d9ea              BLS      |L1.310|
;;;1486   #endif
;;;1487                   }
;;;1488               }
;;;1489           }
;;;1490       }
;;;1491   }
000160  b003              ADD      sp,sp,#0xc
000162  bd30              POP      {r4,r5,pc}
;;;1492   #endif
                          ENDP

                  OS_TaskStat PROC
;;;1410   void  OS_TaskStat (void *p_arg)
;;;1411   {
000164  e92de92d          PUSH     {r4-r8,lr}
;;;1412       INT32U     run;
;;;1413       INT32U     max;
;;;1414       INT8S      usage;
;;;1415   #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;1416       OS_CPU_SR  cpu_sr = 0;
;;;1417   #endif
;;;1418   
;;;1419   
;;;1420   
;;;1421       p_arg = p_arg;                               /* Prevent compiler warning for not using 'parg'      */
;;;1422       while (OSStatRdy == OS_FALSE) {
000168  4db7              LDR      r5,|L1.1096|
00016a  7868              LDRB     r0,[r5,#1]  ; OSStatRdy
00016c  b928              CBNZ     r0,|L1.378|
                  |L1.366|
00016e  2014              MOVS     r0,#0x14
000170  f7fff7ff          BL       OSTimeDly
000174  7868              LDRB     r0,[r5,#1]  ; OSStatRdy
000176  2800              CMP      r0,#0
000178  d0f9              BEQ      |L1.366|
                  |L1.378|
;;;1423           OSTimeDly(2 * OS_TICKS_PER_SEC / 10);    /* Wait until statistic task is ready                 */
;;;1424       }
;;;1425       max = OSIdleCtrMax / 100L;
00017a  6968              LDR      r0,[r5,#0x14]  ; OSIdleCtrMax
00017c  f04ff04f          MOV      r8,#0x64
000180  fbb0fbb0          UDIV     r4,r0,r8
;;;1426       for (;;) {
000184  2700              MOVS     r7,#0
                  |L1.390|
;;;1427           OS_ENTER_CRITICAL();
000186  f7fff7ff          BL       OS_CPU_SR_Save
;;;1428           OSIdleCtrRun = OSIdleCtr;                /* Obtain the of the idle counter for the past second */
00018a  6a29              LDR      r1,[r5,#0x20]  ; OSIdleCtr
00018c  61a9              STR      r1,[r5,#0x18]  ; OSIdleCtrRun
;;;1429           run          = OSIdleCtr;
00018e  6a2e              LDR      r6,[r5,#0x20]  ; OSIdleCtr
;;;1430           OSIdleCtr    = 0L;                       /* Reset the idle counter for the next second         */
000190  622f              STR      r7,[r5,#0x20]  ; OSIdleCtr
;;;1431           OS_EXIT_CRITICAL();
000192  f7fff7ff          BL       OS_CPU_SR_Restore
;;;1432           if (max > 0L) {
000196  b154              CBZ      r4,|L1.430|
;;;1433               usage = (INT8S)(100L - run / max);
000198  fbb6fbb6          UDIV     r0,r6,r4
00019c  f1c0f1c0          RSB      r0,r0,#0x64
0001a0  b240              SXTB     r0,r0
;;;1434               if (usage >= 0) {                    /* Make sure we don't have a negative percentage      */
0001a2  2800              CMP      r0,#0
0001a4  db01              BLT      |L1.426|
;;;1435                   OSCPUUsage = usage;
0001a6  7028              STRB     r0,[r5,#0]  ; OSCPUUsage
0001a8  e005              B        |L1.438|
                  |L1.426|
;;;1436               } else {
;;;1437                   OSCPUUsage = 0;
0001aa  702f              STRB     r7,[r5,#0]  ; OSCPUUsage
0001ac  e003              B        |L1.438|
                  |L1.430|
;;;1438               }
;;;1439           } else {
;;;1440               OSCPUUsage = 0;
0001ae  702f              STRB     r7,[r5,#0]  ; OSCPUUsage
;;;1441               max        = OSIdleCtrMax / 100L;
0001b0  6968              LDR      r0,[r5,#0x14]  ; OSIdleCtrMax
0001b2  fbb0fbb0          UDIV     r4,r0,r8
                  |L1.438|
;;;1442           }
;;;1443           OSTaskStatHook();                        /* Invoke user definable hook                         */
0001b6  f7fff7ff          BL       OSTaskStatHook
;;;1444   #if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
;;;1445           OS_TaskStatStkChk();                     /* Check the stacks for each task                     */
0001ba  f7fff7ff          BL       OS_TaskStatStkChk
;;;1446   #endif
;;;1447           OSTimeDly(OS_TICKS_PER_SEC / 10);        /* Accumulate OSIdleCtr for the next 1/10 second      */
0001be  200a              MOVS     r0,#0xa
0001c0  f7fff7ff          BL       OSTimeDly
0001c4  e7df              B        |L1.390|
;;;1448       }
;;;1449   }
;;;1450   #endif
                          ENDP

                  OS_InitTaskStat PROC
;;;1039   static  void  OS_InitTaskStat (void)
;;;1040   {
0001c6  b500              PUSH     {lr}
0001c8  b087              SUB      sp,sp,#0x1c
;;;1041   #if OS_TASK_NAME_SIZE > 7
;;;1042       INT8U  err;
;;;1043   #endif
;;;1044   
;;;1045   
;;;1046   #if OS_TASK_CREATE_EXT_EN > 0
;;;1047       #if OS_STK_GROWTH == 1
;;;1048       (void)OSTaskCreateExt(OS_TaskStat,
0001ca  2303              MOVS     r3,#3
0001cc  2200              MOVS     r2,#0
0001ce  e9cde9cd          STRD     r2,r3,[sp,#0xc]
0001d2  f64ff64f          MOV      r3,#0xfffe
0001d6  2180              MOVS     r1,#0x80
0001d8  489d              LDR      r0,|L1.1104|
0001da  9300              STR      r3,[sp,#0]
0001dc  9102              STR      r1,[sp,#8]
0001de  231e              MOVS     r3,#0x1e
0001e0  9001              STR      r0,[sp,#4]
0001e2  f500f500          ADD      r2,r0,#0x1fc
0001e6  2100              MOVS     r1,#0
0001e8  f2aff2af          ADR      r0,OS_TaskStat + 1
0001ec  f7fff7ff          BL       OSTaskCreateExt
;;;1049                             (void *)0,                                   /* No args passed to OS_TaskStat()*/
;;;1050                             &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Top-Of-Stack               */
;;;1051                             OS_TASK_STAT_PRIO,                           /* One higher than the idle task  */
;;;1052                             OS_TASK_STAT_ID,
;;;1053                             &OSTaskStatStk[0],                           /* Set Bottom-Of-Stack            */
;;;1054                             OS_TASK_STAT_STK_SIZE,
;;;1055                             (void *)0,                                   /* No TCB extension               */
;;;1056                             OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
;;;1057       #else
;;;1058       (void)OSTaskCreateExt(OS_TaskStat,
;;;1059                             (void *)0,                                   /* No args passed to OS_TaskStat()*/
;;;1060                             &OSTaskStatStk[0],                           /* Set Top-Of-Stack               */
;;;1061                             OS_TASK_STAT_PRIO,                           /* One higher than the idle task  */
;;;1062                             OS_TASK_STAT_ID,
;;;1063                             &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Bottom-Of-Stack            */
;;;1064                             OS_TASK_STAT_STK_SIZE,
;;;1065                             (void *)0,                                   /* No TCB extension               */
;;;1066                             OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
;;;1067       #endif
;;;1068   #else
;;;1069       #if OS_STK_GROWTH == 1
;;;1070       (void)OSTaskCreate(OS_TaskStat,
;;;1071                          (void *)0,                                      /* No args passed to OS_TaskStat()*/
;;;1072                          &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],      /* Set Top-Of-Stack               */
;;;1073                          OS_TASK_STAT_PRIO);                             /* One higher than the idle task  */
;;;1074       #else
;;;1075       (void)OSTaskCreate(OS_TaskStat,
;;;1076                          (void *)0,                                      /* No args passed to OS_TaskStat()*/
;;;1077                          &OSTaskStatStk[0],                              /* Set Top-Of-Stack               */
;;;1078                          OS_TASK_STAT_PRIO);                             /* One higher than the idle task  */
;;;1079       #endif
;;;1080   #endif
;;;1081   
;;;1082   #if OS_TASK_NAME_SIZE > 14
;;;1083       OSTaskNameSet(OS_TASK_STAT_PRIO, (INT8U *)"uC/OS-II Stat", &err);
0001f0  aa06              ADD      r2,sp,#0x18
0001f2  a198              ADR      r1,|L1.1108|
0001f4  201e              MOVS     r0,#0x1e
0001f6  f7fff7ff          BL       OSTaskNameSet
;;;1084   #else
;;;1085   #if OS_TASK_NAME_SIZE > 7
;;;1086       OSTaskNameSet(OS_TASK_STAT_PRIO, (INT8U *)"OS-Stat", &err);
;;;1087   #endif
;;;1088   #endif
;;;1089   }
0001fa  b007              ADD      sp,sp,#0x1c
0001fc  bd00              POP      {pc}
;;;1090   #endif
                          ENDP

                  OS_TaskIdle PROC
;;;1368   void  OS_TaskIdle (void *p_arg)
;;;1369   {
0001fe  b510              PUSH     {r4,lr}
000200  4c91              LDR      r4,|L1.1096|
                  |L1.514|
;;;1370   #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;1371       OS_CPU_SR  cpu_sr = 0;
;;;1372   #endif
;;;1373   
;;;1374   
;;;1375   
;;;1376       (void)p_arg;                                 /* Prevent compiler warning for not using 'parg'      */
;;;1377       for (;;) {
;;;1378           OS_ENTER_CRITICAL();
000202  f7fff7ff          BL       OS_CPU_SR_Save
;;;1379           OSIdleCtr++;
000206  6a21              LDR      r1,[r4,#0x20]  ; OSIdleCtr
000208  1c49              ADDS     r1,r1,#1
00020a  6221              STR      r1,[r4,#0x20]  ; OSIdleCtr
;;;1380           OS_EXIT_CRITICAL();
00020c  f7fff7ff          BL       OS_CPU_SR_Restore
;;;1381           OSTaskIdleHook();                        /* Call user definable HOOK                           */
000210  f7fff7ff          BL       OSTaskIdleHook
000214  e7f5              B        |L1.514|
;;;1382       }
;;;1383   }
;;;1384   /*$PAGE*/
                          ENDP

                  OS_InitTaskIdle PROC
;;;973    static  void  OS_InitTaskIdle (void)
;;;974    {
000216  b500              PUSH     {lr}
000218  b087              SUB      sp,sp,#0x1c
;;;975    #if OS_TASK_NAME_SIZE > 7
;;;976        INT8U  err;
;;;977    #endif
;;;978    
;;;979    
;;;980    #if OS_TASK_CREATE_EXT_EN > 0
;;;981        #if OS_STK_GROWTH == 1
;;;982        (void)OSTaskCreateExt(OS_TaskIdle,
00021a  2303              MOVS     r3,#3
00021c  2200              MOVS     r2,#0
00021e  e9cde9cd          STRD     r2,r3,[sp,#0xc]
000222  f64ff64f          MOV      r3,#0xffff
000226  2180              MOVS     r1,#0x80
000228  488e              LDR      r0,|L1.1124|
00022a  9300              STR      r3,[sp,#0]
00022c  9102              STR      r1,[sp,#8]
00022e  231f              MOVS     r3,#0x1f
000230  9001              STR      r0,[sp,#4]
000232  f500f500          ADD      r2,r0,#0x1fc
000236  2100              MOVS     r1,#0
000238  f2aff2af          ADR      r0,OS_TaskIdle + 1
00023c  f7fff7ff          BL       OSTaskCreateExt
;;;983                              (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
;;;984                              &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */
;;;985                              OS_TASK_IDLE_PRIO,                         /* Lowest priority level                */

⌨️ 快捷键说明

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