📄 os_core.txt
字号:
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 + -