📄 os_core.txt
字号:
;;;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) {
0001c8 ea000001 B |L1.468|
|L1.460|
;;;1423 OSTimeDly(2 * OS_TICKS_PER_SEC / 10); /* Wait until statistic task is ready */
0001cc e3a00014 MOV r0,#0x14
0001d0 ebfffffe BL OSTimeDly
|L1.468|
0001d4 e5d40001 LDRB r0,[r4,#1] ;1422 ; OSStatRdy
0001d8 e3500000 CMP r0,#0 ;1422
0001dc 0afffffa BEQ |L1.460|
;;;1424 }
;;;1425 max = OSIdleCtrMax / 100L;
0001e0 e5940014 LDR r0,[r4,#0x14] ; OSIdleCtrMax
0001e4 e3a01064 MOV r1,#0x64
0001e8 ebfffffe BL __aeabi_uidivmod
0001ec e1a06000 MOV r6,r0
0001f0 e3a05000 MOV r5,#0
|L1.500|
;;;1426 for (;;) {
;;;1427 OS_ENTER_CRITICAL();
0001f4 ebfffffe BL OS_CPU_SR_Save
;;;1428 OSIdleCtrRun = OSIdleCtr; /* Obtain the of the idle counter for the past second */
0001f8 e5941020 LDR r1,[r4,#0x20] ; OSIdleCtr
;;;1429 run = OSIdleCtr;
0001fc e5841018 STR r1,[r4,#0x18] ; OSIdleCtrRun
000200 e5947020 LDR r7,[r4,#0x20] ; OSIdleCtr
;;;1430 OSIdleCtr = 0L; /* Reset the idle counter for the next second */
000204 e5845020 STR r5,[r4,#0x20] ; OSIdleCtr
;;;1431 OS_EXIT_CRITICAL();
000208 ebfffffe BL OS_CPU_SR_Restore
;;;1432 if (max > 0L) {
00020c e3560000 CMP r6,#0
000210 0a000008 BEQ |L1.568|
;;;1433 usage = (INT8S)(100L - run / max);
000214 e1a01006 MOV r1,r6
000218 e1a00007 MOV r0,r7
00021c ebfffffe BL __aeabi_uidivmod
000220 e2600064 RSB r0,r0,#0x64
000224 e1a00c00 LSL r0,r0,#24
000228 e1b00c40 ASRS r0,r0,#24
;;;1434 if (usage >= 0) { /* Make sure we don't have a negative percentage */
;;;1435 OSCPUUsage = usage;
;;;1436 } else {
;;;1437 OSCPUUsage = 0;
00022c 45c45000 STRBMI r5,[r4,#0] ; OSCPUUsage
000230 55c40000 STRBPL r0,[r4,#0] ;1435 ; OSCPUUsage
000234 ea000004 B |L1.588|
|L1.568|
;;;1438 }
;;;1439 } else {
;;;1440 OSCPUUsage = 0;
000238 e5c45000 STRB r5,[r4,#0] ; OSCPUUsage
;;;1441 max = OSIdleCtrMax / 100L;
00023c e5940014 LDR r0,[r4,#0x14] ; OSIdleCtrMax
000240 e3a01064 MOV r1,#0x64
000244 ebfffffe BL __aeabi_uidivmod
000248 e1a06000 MOV r6,r0
|L1.588|
;;;1442 }
;;;1443 OSTaskStatHook(); /* Invoke user definable hook */
00024c ebfffffe 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 */
000250 ebfffffe BL OS_TaskStatStkChk
;;;1446 #endif
;;;1447 OSTimeDly(OS_TICKS_PER_SEC / 10); /* Accumulate OSIdleCtr for the next 1/10 second */
000254 e3a0000a MOV r0,#0xa
000258 ebfffffe BL OSTimeDly
00025c eaffffe4 B |L1.500|
;;;1448 }
;;;1449 }
;;;1450 #endif
ENDP
OS_TaskIdle PROC
;;;1368 void OS_TaskIdle (void *p_arg)
;;;1369 {
000260 e92d4010 PUSH {r4,lr}
000264 e59f4364 LDR r4,|L1.1488|
|L1.616|
;;;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();
000268 ebfffffe BL OS_CPU_SR_Save
;;;1379 OSIdleCtr++;
00026c e5941020 LDR r1,[r4,#0x20] ; OSIdleCtr
000270 e2811001 ADD r1,r1,#1
000274 e5841020 STR r1,[r4,#0x20] ; OSIdleCtr
;;;1380 OS_EXIT_CRITICAL();
000278 ebfffffe BL OS_CPU_SR_Restore
;;;1381 OSTaskIdleHook(); /* Call user definable HOOK */
00027c ebfffffe BL OSTaskIdleHook
000280 eafffff8 B |L1.616|
;;;1382 }
;;;1383 }
;;;1384 /*$PAGE*/
ENDP
OS_MemClr PROC
000284 e3a02000 MOV r2,#0 ;0
|L1.648|
000288 e3510000 CMP r1,#0 ;0
00028c 12411001 SUBNE r1,r1,#1 ;0
000290 11a01801 LSLNE r1,r1,#16 ;0
000294 11a01821 LSRNE r1,r1,#16 ;0
000298 14c02001 STRBNE r2,[r0],#1 ;0
00029c 1afffff9 BNE |L1.648|
0002a0 e12fff1e BX lr ;0
ENDP
OSInit PROC
;;;246 void OSInit (void)
;;;247 {
0002a4 e92d4010 PUSH {r4,lr}
0002a8 e24dd018 SUB sp,sp,#0x18
;;;248 OSInitHookBegin(); /* Call port specific initialization code */
0002ac ebfffffe BL OSInitHookBegin
0002b0 e59fc318 LDR r12,|L1.1488|
0002b4 e3a03000 MOV r3,#0
0002b8 e58c3034 STR r3,[r12,#0x34] ; OSTime
0002bc e5cc3002 STRB r3,[r12,#2] ; OSIntNesting
0002c0 e5cc3003 STRB r3,[r12,#3] ; OSLockNesting
0002c4 e5cc3008 STRB r3,[r12,#8] ; OSTaskCtr
0002c8 e5cc3007 STRB r3,[r12,#7] ; OSRunning
0002cc e58c300c STR r3,[r12,#0xc] ; OSCtxSwCtr
0002d0 e58c3020 STR r3,[r12,#0x20] ; OSIdleCtr
0002d4 e58c3018 STR r3,[r12,#0x18] ; OSIdleCtrRun
0002d8 e58c3014 STR r3,[r12,#0x14] ; OSIdleCtrMax
0002dc e5cc3001 STRB r3,[r12,#1] ; OSStatRdy
0002e0 e28c101c ADD r1,r12,#0x1c
0002e4 e1a00003 MOV r0,r3
0002e8 e5cc3006 STRB r3,[r12,#6] ; OSRdyGrp
|L1.748|
0002ec e2800001 ADD r0,r0,#1
0002f0 e20000ff AND r0,r0,#0xff
0002f4 e3500004 CMP r0,#4
0002f8 e4c13001 STRB r3,[r1],#1
0002fc 3afffffa BCC |L1.748|
000300 e5cc3004 STRB r3,[r12,#4] ; OSPrioCur
000304 e5cc3005 STRB r3,[r12,#5] ; OSPrioHighRdy
000308 e58c302c STR r3,[r12,#0x2c] ; OSTCBHighRdy
00030c e59f02c4 LDR r0,|L1.1496|
000310 e3a01e63 MOV r1,#0x630
000314 e58c3024 STR r3,[r12,#0x24] ; OSTCBCur
000318 ebfffffe BL OS_MemClr
00031c e59f02b0 LDR r0,|L1.1492|
000320 e3a01080 MOV r1,#0x80
000324 ebfffffe BL OS_MemClr
000328 e59f02a8 LDR r0,|L1.1496|
00032c e3a01000 MOV r1,#0
000330 e280e000 ADD lr,r0,#0
000334 e28e2058 ADD r2,lr,#0x58
000338 e3a0403f MOV r4,#0x3f
|L1.828|
00033c e5802014 STR r2,[r0,#0x14]
000340 e2811001 ADD r1,r1,#1
000344 e5c04048 STRB r4,[r0,#0x48]
000348 e20110ff AND r1,r1,#0xff
00034c e5c03049 STRB r3,[r0,#0x49]
000350 e3510011 CMP r1,#0x11
000354 e2800058 ADD r0,r0,#0x58
000358 e2822058 ADD r2,r2,#0x58
00035c 3afffff6 BCC |L1.828|
000360 e5803014 STR r3,[r0,#0x14]
000364 e5c04048 STRB r4,[r0,#0x48]
000368 e5c03049 STRB r3,[r0,#0x49]
00036c e58c3030 STR r3,[r12,#0x30] ; OSTCBList, OSTCBFreeList
000370 e59f0264 LDR r0,|L1.1500|
000374 e3a01d05 MOV r1,#0x140
000378 e58ce028 STR lr,[r12,#0x28]
00037c ebfffffe BL OS_MemClr
000380 e59f0254 LDR r0,|L1.1500|
000384 e3a02000 MOV r2,#0
000388 e280e000 ADD lr,r0,#0
00038c e28e1020 ADD r1,lr,#0x20
|L1.912|
000390 e5c03000 STRB r3,[r0,#0]
000394 e5801004 STR r1,[r0,#4]
000398 e2822001 ADD r2,r2,#1
00039c e5c0400f STRB r4,[r0,#0xf]
0003a0 e3c22801 BIC r2,r2,#0x10000
0003a4 e5c03010 STRB r3,[r0,#0x10]
0003a8 e3520009 CMP r2,#9
0003ac e2800020 ADD r0,r0,#0x20
0003b0 e2811020 ADD r1,r1,#0x20
0003b4 3afffff5 BCC |L1.912|
0003b8 e5c03000 STRB r3,[r0,#0]
0003bc e5803004 STR r3,[r0,#4]
0003c0 e5c0400f STRB r4,[r0,#0xf]
0003c4 e5c03010 STRB r3,[r0,#0x10]
0003c8 e58ce010 STR lr,[r12,#0x10] ; OSEventFreeList
;;;249
;;;250 OS_InitMisc(); /* Initialize miscellaneous variables */
;;;251
;;;252 OS_InitRdyList(); /* Initialize the Ready List */
;;;253
;;;254 OS_InitTCBList(); /* Initialize the free list of OS_TCBs */
;;;255
;;;256 OS_InitEventList(); /* Initialize the free list of OS_EVENTs */
;;;257
;;;258 #if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;259 OS_FlagInit(); /* Initialize the event flag structures */
0003cc ebfffffe BL OS_FlagInit
;;;260 #endif
;;;261
;;;262 #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
;;;263 OS_MemInit(); /* Initialize the memory manager */
0003d0 ebfffffe BL OS_MemInit
;;;264 #endif
;;;265
;;;266 #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
;;;267 OS_QInit(); /* Initialize the message queue structures */
0003d4 ebfffffe BL OS_QInit
0003d8 e59f0200 LDR r0,|L1.1504|
0003dc e3a03003 MOV r3,#3
0003e0 e3a02000 MOV r2,#0
0003e4 e3a01080 MOV r1,#0x80
0003e8 e98d000f STMIB sp,{r0-r3}
0003ec e59f31f0 LDR r3,|L1.1508|
0003f0 e2802f7f ADD r2,r0,#0x1fc
0003f4 e58d3000 STR r3,[sp,#0]
0003f8 e3a0301f MOV r3,#0x1f
0003fc e3a01000 MOV r1,#0
000400 e24f0f6a ADR r0,OS_TaskIdle
000404 ebfffffe BL OSTaskCreateExt
000408 e28d2014 ADD r2,sp,#0x14
00040c e28f1f75 ADR r1,|L1.1512|
000410 e3a0001f MOV r0,#0x1f
000414 ebfffffe BL OSTaskNameSet
000418 e59f01d8 LDR r0,|L1.1528|
00041c e3a03003 MOV r3,#3
000420 e3a02000 MOV r2,#0
000424 e3a01080 MOV r1,#0x80
000428 e98d000f STMIB sp,{r0-r3}
00042c e59f31c8 LDR r3,|L1.1532|
000430 e2802f7f ADD r2,r0,#0x1fc
000434 e58d3000 STR r3,[sp,#0]
000438 e3a0301e MOV r3,#0x1e
00043c e3a01000 MOV r1,#0
000440 e24f0fa2 ADR r0,OS_TaskStat
000444 ebfffffe BL OSTaskCreateExt
000448 e28d2014 ADD r2,sp,#0x14
00044c e28f1f6b ADR r1,|L1.1536|
000450 e3a0001e MOV r0,#0x1e
000454 ebfffffe BL OSTaskNameSet
;;;268 #endif
;;;269
;;;270 OS_InitTaskIdle(); /* Create the Idle Task */
;;;271 #if OS_TASK_STAT_EN > 0
;;;272 OS_InitTaskStat(); /* Create the Statistic Task */
;;;273 #endif
;;;274
;;;275 #if OS_TMR_EN > 0
;;;276 OSTmr_Init(); /* Initialize the Timer Manager */
000458 ebfffffe BL OSTmr_Init
;;;277 #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -