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