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

📄 os_core.txt

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
0002a6  312e              ADDS     r1,r1,#0x2e           ;458
0002a8  788a              LDRB     r2,[r1,#2]            ;458
0002aa  4302              ORRS     r2,r2,r0              ;458
0002ac  708a              STRB     r2,[r1,#2]            ;458
0002ae  f881f881          STRB     r9,[r1,#3]            ;460
0002b2  9803              LDR      r0,[sp,#0xc]          ;461
0002b4  8008              STRH     r0,[r1,#0]            ;461
0002b6  9800              LDR      r0,[sp,#0]            ;462
0002b8  f7fff7ff          BL       OS_EventTaskWaitMulti
0002bc  4650              MOV      r0,r10                ;464
0002be  f7fff7ff          BL       OS_CPU_SR_Restore
0002c2  f7fff7ff          BL       OS_Sched
0002c6  f7fff7ff          BL       OS_CPU_SR_Save
0002ca  4682              MOV      r10,r0                ;466
0002cc  4855              LDR      r0,|L1.1060|
0002ce  6a40              LDR      r0,[r0,#0x24]         ;468  ; OSTCBCur
0002d0  f890f890          LDRB     r1,[r0,#0x31]         ;468
0002d4  b109              CBZ      r1,|L1.730|
0002d6  2902              CMP      r1,#2                 ;468
0002d8  d10d              BNE      |L1.758|
                  |L1.730|
0002da  69c4              LDR      r4,[r0,#0x1c]         ;471
0002dc  b12c              CBZ      r4,|L1.746|
0002de  602c              STR      r4,[r5,#0]            ;473
0002e0  f845f845          STR      r9,[r5,#4]!           ;474
0002e4  1c7f              ADDS     r7,r7,#1              ;475
0002e6  b2bf              UXTH     r7,r7                 ;475
0002e8  e008              B        |L1.764|
                  |L1.746|
0002ea  f880f880          STRB     r11,[r0,#0x31]        ;478
0002ee  9900              LDR      r1,[sp,#0]            ;479
0002f0  f7fff7ff          BL       OS_EventTaskRemoveMulti
0002f4  e002              B        |L1.764|
                  |L1.758|
0002f6  9900              LDR      r1,[sp,#0]            ;485
0002f8  f7fff7ff          BL       OS_EventTaskRemoveMulti
                  |L1.764|
0002fc  4a49              LDR      r2,|L1.1060|
0002fe  6a51              LDR      r1,[r2,#0x24]         ;489  ; OSTCBCur
000300  f891f891          LDRB     r0,[r1,#0x31]         ;489
000304  b138              CBZ      r0,|L1.790|
000306  2802              CMP      r0,#2                 ;489
000308  d11d              BNE      |L1.838|
00030a  f8c6f8c6          STR      r9,[r6,#0]            ;518
00030e  200e              MOVS     r0,#0xe               ;519
000310  f888f888          STRB     r0,[r8,#0]            ;519
000314  e01c              B        |L1.848|
                  |L1.790|
000316  7820              LDRB     r0,[r4,#0]            ;491
000318  2801              CMP      r0,#1                 ;491
00031a  d006              BEQ      |L1.810|
00031c  2802              CMP      r0,#2                 ;491
00031e  d004              BEQ      |L1.810|
000320  2803              CMP      r0,#3                 ;491
000322  d107              BNE      |L1.820|
000324  f8c6f8c6          STR      r9,[r6,#0]            ;494
000328  e001              B        |L1.814|
                  |L1.810|
00032a  6a48              LDR      r0,[r1,#0x24]         ;502
00032c  6030              STR      r0,[r6,#0]            ;502
                  |L1.814|
00032e  f888f888          STRB     r9,[r8,#0]            ;514
000332  e00d              B        |L1.848|
                  |L1.820|
000334  4650              MOV      r0,r10                ;509
000336  f7fff7ff          BL       OS_CPU_SR_Restore
00033a  f8c5f8c5          STR      r9,[r5,#0]            ;510
00033e  f888f888          STRB     r11,[r8,#0]           ;511
000342  4638              MOV      r0,r7                 ;512
000344  e754              B        |L1.496|
                  |L1.838|
000346  f8c6f8c6          STR      r9,[r6,#0]            ;524
00034a  200a              MOVS     r0,#0xa               ;525
00034c  f888f888          STRB     r0,[r8,#0]            ;525
                  |L1.848|
000350  6a50              LDR      r0,[r2,#0x24]         ;529  ; OSTCBCur
000352  f880f880          STRB     r9,[r0,#0x30]         ;529
000356  f880f880          STRB     r9,[r0,#0x31]         ;530
00035a  f8c0f8c0          STR      r9,[r0,#0x1c]         ;531
00035e  f8c0f8c0          STR      r9,[r0,#0x20]         ;532
000362  f8c0f8c0          STR      r9,[r0,#0x24]         ;533
000366  4650              MOV      r0,r10                ;534
000368  f7fff7ff          BL       OS_CPU_SR_Restore
00036c  4638              MOV      r0,r7                 ;536
00036e  e73f              B        |L1.496|
;;;538    #endif
                          ENDP

                  OS_TaskStatStkChk PROC
;;;1850   void  OS_TaskStatStkChk (void)
;;;1851   {
000370  b57c              PUSH     {r2-r6,lr}
;;;1852       OS_TCB      *ptcb;
;;;1853       OS_STK_DATA  stk_data;
;;;1854       INT8U        err;
;;;1855       INT8U        prio;
;;;1856   
;;;1857   
;;;1858       for (prio = 0; prio <= OS_TASK_IDLE_PRIO; prio++) {
000372  2400              MOVS     r4,#0
000374  4d2d              LDR      r5,|L1.1068|
                  |L1.886|
;;;1859           err = OSTaskStkChk(prio, &stk_data);
000376  4669              MOV      r1,sp
000378  4620              MOV      r0,r4
00037a  f7fff7ff          BL       OSTaskStkChk
;;;1860           if (err == OS_ERR_NONE) {
00037e  b958              CBNZ     r0,|L1.920|
;;;1861               ptcb = OSTCBPrioTbl[prio];
000380  f855f855          LDR      r0,[r5,r4,LSL #2]
;;;1862               if (ptcb != (OS_TCB *)0) {                               /* Make sure task 'ptcb' is ...   */
000384  b140              CBZ      r0,|L1.920|
;;;1863                   if (ptcb != OS_TCB_RESERVED) {                       /* ... still valid.               */
000386  2801              CMP      r0,#1
000388  d006              BEQ      |L1.920|
;;;1864   #if OS_TASK_PROFILE_EN > 0
;;;1865                       #if OS_STK_GROWTH == 1
;;;1866                       ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom + ptcb->OSTCBStkSize;
00038a  e9d0e9d0          LDRD     r1,r2,[r0,#8]
00038e  eb01eb01          ADD      r1,r1,r2,LSL #2
000392  6441              STR      r1,[r0,#0x44]
;;;1867                       #else
;;;1868                       ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom - ptcb->OSTCBStkSize;
;;;1869                       #endif
;;;1870                       ptcb->OSTCBStkUsed = stk_data.OSUsed;            /* Store the number of bytes used */
000394  9901              LDR      r1,[sp,#4]
000396  6481              STR      r1,[r0,#0x48]
                  |L1.920|
000398  1c64              ADDS     r4,r4,#1              ;1858
00039a  b2e4              UXTB     r4,r4                 ;1858
00039c  2c1f              CMP      r4,#0x1f              ;1858
00039e  d9ea              BLS      |L1.886|
;;;1871   #endif
;;;1872                   }
;;;1873               }
;;;1874           }
;;;1875       }
;;;1876   }
0003a0  bd7c              POP      {r2-r6,pc}
;;;1877   #endif
                          ENDP

                  OS_TaskStat PROC
;;;1805   void  OS_TaskStat (void *p_arg)
;;;1806   {
0003a2  b570              PUSH     {r4-r6,lr}
;;;1807   #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;1808       OS_CPU_SR  cpu_sr = 0;
;;;1809   #endif
;;;1810   
;;;1811   
;;;1812   
;;;1813       (void)p_arg;                                 /* Prevent compiler warning for not using 'p_arg'     */
;;;1814       while (OSStatRdy == OS_FALSE) {
0003a4  4c1f              LDR      r4,|L1.1060|
0003a6  e002              B        |L1.942|
                  |L1.936|
;;;1815           OSTimeDly(2 * OS_TICKS_PER_SEC / 10);    /* Wait until statistic task is ready                 */
0003a8  20c8              MOVS     r0,#0xc8
0003aa  f7fff7ff          BL       OSTimeDly
                  |L1.942|
0003ae  7860              LDRB     r0,[r4,#1]            ;1814  ; OSStatRdy
0003b0  2800              CMP      r0,#0                 ;1814
0003b2  d0f9              BEQ      |L1.936|
;;;1816       }
;;;1817       OSIdleCtrMax /= 100L;
0003b4  6960              LDR      r0,[r4,#0x14]  ; OSIdleCtrMax
0003b6  2164              MOVS     r1,#0x64
0003b8  fbb0fbb0          UDIV     r0,r0,r1
0003bc  6160              STR      r0,[r4,#0x14]  ; OSIdleCtrMax
;;;1818       if (OSIdleCtrMax == 0L) {
0003be  2500              MOVS     r5,#0
0003c0  b918              CBNZ     r0,|L1.970|
;;;1819           OSCPUUsage = 0;
0003c2  7025              STRB     r5,[r4,#0]  ; OSCPUUsage
;;;1820           (void)OSTaskSuspend(OS_PRIO_SELF);
0003c4  20ff              MOVS     r0,#0xff
0003c6  f7fff7ff          BL       OSTaskSuspend
                  |L1.970|
;;;1821       }
;;;1822       for (;;) {
;;;1823           OS_ENTER_CRITICAL();
0003ca  f7fff7ff          BL       OS_CPU_SR_Save
;;;1824           OSIdleCtrRun = OSIdleCtr;                /* Obtain the of the idle counter for the past second */
0003ce  6a21              LDR      r1,[r4,#0x20]  ; OSIdleCtr
0003d0  61a1              STR      r1,[r4,#0x18]  ; OSIdleCtrRun
;;;1825           OSIdleCtr    = 0L;                       /* Reset the idle counter for the next second         */
0003d2  6225              STR      r5,[r4,#0x20]  ; OSIdleCtr
;;;1826           OS_EXIT_CRITICAL();
0003d4  f7fff7ff          BL       OS_CPU_SR_Restore
;;;1827           OSCPUUsage   = (INT8U)(100L - OSIdleCtrRun / OSIdleCtrMax);
0003d8  e9d4e9d4          LDRD     r1,r0,[r4,#0x14]
0003dc  fbb0fbb0          UDIV     r0,r0,r1
0003e0  f1c0f1c0          RSB      r0,r0,#0x64
0003e4  7020              STRB     r0,[r4,#0]  ; OSCPUUsage
;;;1828           OSTaskStatHook();                        /* Invoke user definable hook                         */
0003e6  f7fff7ff          BL       OSTaskStatHook
;;;1829   #if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
;;;1830           OS_TaskStatStkChk();                     /* Check the stacks for each task                     */
0003ea  f7fff7ff          BL       OS_TaskStatStkChk
;;;1831   #endif
;;;1832           OSTimeDly(OS_TICKS_PER_SEC / 10);        /* Accumulate OSIdleCtr for the next 1/10 second      */
0003ee  2064              MOVS     r0,#0x64
0003f0  f7fff7ff          BL       OSTimeDly
0003f4  e7e9              B        |L1.970|
;;;1833       }
;;;1834   }
;;;1835   #endif
                          ENDP

                  OS_InitTaskStat PROC
;;;1434   static  void  OS_InitTaskStat (void)
;;;1435   {
0003f6  b500              PUSH     {lr}
0003f8  b087              SUB      sp,sp,#0x1c
;;;1436   #if OS_TASK_NAME_SIZE > 7
;;;1437       INT8U  err;
;;;1438   #endif
;;;1439   
;;;1440   
;;;1441   #if OS_TASK_CREATE_EXT_EN > 0
;;;1442       #if OS_STK_GROWTH == 1
;;;1443       (void)OSTaskCreateExt(OS_TaskStat,
0003fa  2303              MOVS     r3,#3
0003fc  2200              MOVS     r2,#0
0003fe  e9cde9cd          STRD     r2,r3,[sp,#0xc]
000402  480b              LDR      r0,|L1.1072|
000404  2180              MOVS     r1,#0x80
000406  e9cde9cd          STRD     r0,r1,[sp,#4]
00040a  f64ff64f          MOV      r3,#0xfffe
00040e  9300              STR      r3,[sp,#0]
000410  231e              MOVS     r3,#0x1e
000412  f500f500          ADD      r2,r0,#0x1fc
000416  2100              MOVS     r1,#0
000418  f2aff2af          ADR      r0,OS_TaskStat + 1
00041c  f7fff7ff          BL       OSTaskCreateExt
;;;1444                             (void *)0,                                   /* No args passed to OS_TaskStat()*/
;;;1445                             &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Top-Of-Stack               */
;;;1446                             OS_TASK_STAT_PRIO,                           /* One higher than the idle task  */
;;;1447                             OS_TASK_STAT_ID,
;;;1448                             &OSTaskStatStk[0],                           /* Set Bottom-Of-Stack            */
;;;1449                             OS_TASK_STAT_STK_SIZE,
;;;1450                             (void *)0,                                   /* No TCB extension               */
;;;1451                             OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
;;;1452       #else
;;;1453       (void)OSTaskCreateExt(OS_TaskStat,
;;;1454                             (void *)0,                                   /* No args passed to OS_TaskStat()*/
;;;1455                             &OSTaskStatStk[0],                           /* Set Top-Of-Stack               */
;;;1456                             OS_TASK_STAT_PRIO,                           /* One higher than the idle task  */
;;;1457                             OS_TASK_STAT_ID,
;;;1458                             &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Bottom-Of-Stack            */
;;;1459                             OS_TASK_STAT_STK_SIZE,
;;;1460                             (void *)0,                                   /* No TCB extension               */
;;;1461                             OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
;;;1462       #endif
;;;1463   #else
;;;1464       #if OS_STK_GROWTH == 1
;;;1465       (void)OSTaskCreate(OS_TaskStat,
;;;1466                          (void *)0,                                      /* No args passed to OS_TaskStat()*/
;;;1467                          &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],      /* Set Top-Of-Stack               */
;;;1468                          OS_TASK_STAT_PRIO);                             /* One higher than the idle task  */
;;;1469       #else
;;;1470       (void)OSTaskCreate(OS_TaskStat,
;;;1471                          (void *)0,                                      /* No args passed to OS_TaskStat()*/
;;;1472                          &OSTaskStatStk[0],                              /* Set Top-Of-Stack               */

⌨️ 快捷键说明

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