📄 os_core.txt
字号:
000350 e594000c LDR r0,[r4,#0xc] ; OSCtxSwCtr
000354 e2800001 ADD r0,r0,#1
000358 e584000c STR r0,[r4,#0xc] ; OSCtxSwCtr
|L1.860|
;;;190 OSIntCtxSw(); /* Perform interrupt level ctx switch */
;;;191 }
;;;192 }
;;;193 OS_EXIT_CRITICAL();
;;;194 }
;;;195 }
00035c e8bd4010 POP {r4,lr}
000360 e12fff1e BX lr
|L1.868|
000364 ef000003 SVC #0x3 ;193
000368 eafffffb B |L1.860|
;;;196 /*$PAGE*/
ENDP
OSSchedLock PROC
;;;214 void OSSchedLock (void)
;;;215 {
00036c e92d4010 PUSH {r4,lr}
;;;216 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;217 OS_CPU_SR cpu_sr;
;;;218 #endif
;;;219
;;;220
;;;221 if (OSRunning == TRUE) { /* Make sure multitasking is running */
000370 e59f44e4 LDR r4,|L1.2140|
000374 e5d40008 LDRB r0,[r4,#8] ; OSRunning
000378 e3500001 CMP r0,#1
00037c 1a000006 BNE |L1.924|
;;;222 OS_ENTER_CRITICAL();
000380 ef000002 SVC #0x2
;;;223 if (OSLockNesting < 255) { /* Prevent OSLockNesting from wrapping back to 0 */
000384 e5d40004 LDRB r0,[r4,#4] ; OSLockNesting
000388 e35000ff CMP r0,#0xff
00038c 2a000001 BCS |L1.920|
;;;224 OSLockNesting++; /* Increment lock nesting level */
000390 e2800001 ADD r0,r0,#1
000394 e5c40004 STRB r0,[r4,#4] ; OSLockNesting
|L1.920|
;;;225 }
;;;226 OS_EXIT_CRITICAL();
000398 ef000003 SVC #0x3
|L1.924|
;;;227 }
;;;228 }
00039c e8bd4010 POP {r4,lr}
0003a0 e12fff1e BX lr
;;;229 #endif
ENDP
OS_Sched PROC
;;;869 void OS_Sched (void)
;;;870 {
0003a4 e92d4010 PUSH {r4,lr}
;;;871 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;872 OS_CPU_SR cpu_sr;
;;;873 #endif
;;;874 INT8U y;
;;;875
;;;876
;;;877 OS_ENTER_CRITICAL();
0003a8 ef000002 SVC #0x2
;;;878 if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Sched. only if all ISRs done & not locked */
0003ac e59f14a8 LDR r1,|L1.2140|
0003b0 e5d10002 LDRB r0,[r1,#2] ; OSIntNesting
0003b4 e5d12004 LDRB r2,[r1,#4] ; OSLockNesting
0003b8 e1900002 ORRS r0,r0,r2
0003bc 1a000012 BNE |L1.1036|
;;;879 y = OSUnMapTbl[OSRdyGrp]; /* Get pointer to HPT ready to run */
0003c0 e5d10007 LDRB r0,[r1,#7] ; OSRdyGrp
0003c4 e59f24b8 LDR r2,|L1.2180|
0003c8 e7d20000 LDRB r0,[r2,r0]
;;;880 OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
0003cc e59f34b4 LDR r3,|L1.2184|
0003d0 e7d33000 LDRB r3,[r3,r0]
0003d4 e7d22003 LDRB r2,[r2,r3]
0003d8 e0820180 ADD r0,r2,r0,LSL #3
0003dc e20000ff AND r0,r0,#0xff
0003e0 e5c10006 STRB r0,[r1,#6] ; OSPrioHighRdy
;;;881 if (OSPrioHighRdy != OSPrioCur) { /* No Ctx Sw if current task is highest rdy */
0003e4 e5d12005 LDRB r2,[r1,#5] ; OSPrioCur
0003e8 e1500002 CMP r0,r2
0003ec 0a000006 BEQ |L1.1036|
;;;882 OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
0003f0 e59f2484 LDR r2,|L1.2172|
0003f4 e7920100 LDR r0,[r2,r0,LSL #2]
0003f8 e5810028 STR r0,[r1,#0x28] ; OSTCBHighRdy
;;;883 OSCtxSwCtr++; /* Increment context switch counter */
0003fc e591000c LDR r0,[r1,#0xc] ; OSCtxSwCtr
000400 e2800001 ADD r0,r0,#1
000404 e581000c STR r0,[r1,#0xc] ; OSCtxSwCtr
;;;884 OS_TASK_SW(); /* Perform a context switch */
000408 ef000000 SVC #0x0
|L1.1036|
;;;885 }
;;;886 }
;;;887 OS_EXIT_CRITICAL();
00040c ef000003 SVC #0x3
;;;888 }
000410 e8bd4010 POP {r4,lr}
000414 e12fff1e BX lr
;;;889 /*$PAGE*/
ENDP
OSSchedUnlock PROC
;;;248 void OSSchedUnlock (void)
;;;249 {
000418 e92d4010 PUSH {r4,lr}
;;;250 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;251 OS_CPU_SR cpu_sr;
;;;252 #endif
;;;253
;;;254
;;;255 if (OSRunning == TRUE) { /* Make sure multitasking is running */
00041c e59f4438 LDR r4,|L1.2140|
000420 e5d40008 LDRB r0,[r4,#8] ; OSRunning
000424 e3500001 CMP r0,#1
000428 1a00000d BNE |L1.1124|
;;;256 OS_ENTER_CRITICAL();
00042c ef000002 SVC #0x2
;;;257 if (OSLockNesting > 0) { /* Do not decrement if already 0 */
000430 e5d40004 LDRB r0,[r4,#4] ; OSLockNesting
000434 e3500000 CMP r0,#0
000438 0a00000b BEQ |L1.1132|
;;;258 OSLockNesting--; /* Decrement lock nesting level */
00043c e2400001 SUB r0,r0,#1
000440 e20000ff AND r0,r0,#0xff
000444 e5c40004 STRB r0,[r4,#4] ; OSLockNesting
;;;259 if ((OSLockNesting == 0) && (OSIntNesting == 0)) { /* See if sched. enabled and not an ISR */
000448 e5d41002 LDRB r1,[r4,#2] ; OSIntNesting
00044c e1900001 ORRS r0,r0,r1
000450 1a000002 BNE |L1.1120|
;;;260 OS_EXIT_CRITICAL();
000454 ef000003 SVC #0x3
;;;261 OS_Sched(); /* See if a HPT is ready */
000458 e8bd4010 POP {r4,lr}
00045c eafffffe B OS_Sched
|L1.1120|
;;;262 } else {
;;;263 OS_EXIT_CRITICAL();
000460 ef000003 SVC #0x3
|L1.1124|
;;;264 }
;;;265 } else {
;;;266 OS_EXIT_CRITICAL();
;;;267 }
;;;268 }
;;;269 }
000464 e8bd4010 POP {r4,lr}
000468 e12fff1e BX lr
|L1.1132|
00046c ef000003 SVC #0x3 ;266
000470 eafffffb B |L1.1124|
;;;270 #endif
ENDP
OSStart PROC
;;;298
;;;299 if (OSRunning == FALSE) {
000474 e59f03e0 LDR r0,|L1.2140|
000478 e5d01008 LDRB r1,[r0,#8] ; OSRunning
00047c e3510000 CMP r1,#0
000480 1a00000e BNE |L1.1216|
;;;300 y = OSUnMapTbl[OSRdyGrp]; /* Find highest priority's task priority number */
000484 e5d01007 LDRB r1,[r0,#7] ; OSRdyGrp
000488 e59f23f4 LDR r2,|L1.2180|
00048c e7d21001 LDRB r1,[r2,r1]
;;;301 x = OSUnMapTbl[OSRdyTbl[y]];
000490 e59f33f0 LDR r3,|L1.2184|
000494 e7d33001 LDRB r3,[r3,r1]
000498 e7d22003 LDRB r2,[r2,r3]
;;;302 OSPrioHighRdy = (INT8U)((y << 3) + x);
00049c e0821181 ADD r1,r2,r1,LSL #3
0004a0 e20110ff AND r1,r1,#0xff
0004a4 e5c01006 STRB r1,[r0,#6] ; OSPrioHighRdy
;;;303 OSPrioCur = OSPrioHighRdy;
0004a8 e5c01005 STRB r1,[r0,#5] ; OSPrioCur
;;;304 OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run */
0004ac e59f23c8 LDR r2,|L1.2172|
0004b0 e7921101 LDR r1,[r2,r1,LSL #2]
0004b4 e5801028 STR r1,[r0,#0x28] ; OSTCBHighRdy
;;;305 OSTCBCur = OSTCBHighRdy;
0004b8 e5801020 STR r1,[r0,#0x20] ; OSTCBCur
;;;306 OSStartHighRdy(); /* Execute target specific code to start task */
0004bc eafffffe B OSStartHighRdy
|L1.1216|
;;;307 }
;;;308 }
0004c0 e12fff1e BX lr
;;;309 /*$PAGE*/
ENDP
OSStatInit PROC
;;;331 void OSStatInit (void)
;;;332 {
0004c4 e92d4010 PUSH {r4,lr}
;;;333 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;334 OS_CPU_SR cpu_sr;
;;;335 #endif
;;;336
;;;337
;;;338 OSTimeDly(2); /* Synchronize with clock tick */
0004c8 e3a00002 MOV r0,#2
0004cc ebfffffe BL OSTimeDly
;;;339 OS_ENTER_CRITICAL();
0004d0 ef000002 SVC #0x2
;;;340 OSIdleCtr = 0L; /* Clear idle counter */
0004d4 e59f4380 LDR r4,|L1.2140|
0004d8 e3a00000 MOV r0,#0
0004dc e584001c STR r0,[r4,#0x1c] ; OSIdleCtr
;;;341 OS_EXIT_CRITICAL();
0004e0 ef000003 SVC #0x3
;;;342 OSTimeDly(OS_TICKS_PER_SEC); /* Determine MAX. idle counter value for 1 second */
0004e4 e3a000c8 MOV r0,#0xc8
0004e8 ebfffffe BL OSTimeDly
;;;343 OS_ENTER_CRITICAL();
0004ec ef000002 SVC #0x2
;;;344 OSIdleCtrMax = OSIdleCtr; /* Store maximum idle counter count in 1 second */
0004f0 e594001c LDR r0,[r4,#0x1c] ; OSIdleCtr
0004f4 e5840014 STR r0,[r4,#0x14] ; OSIdleCtrMax
;;;345 OSStatRdy = TRUE;
0004f8 e3a00001 MOV r0,#1
0004fc e5c40001 STRB r0,[r4,#1] ; OSStatRdy
;;;346 OS_EXIT_CRITICAL();
000500 ef000003 SVC #0x3
;;;347 }
000504 e8bd4010 POP {r4,lr}
000508 e12fff1e BX lr
;;;348 #endif
ENDP
OSTimeTick PROC
;;;364 void OSTimeTick (void)
;;;365 {
00050c e92d4070 PUSH {r4-r6,lr}
;;;366 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;367 OS_CPU_SR cpu_sr;
;;;368 #endif
;;;369 OS_TCB *ptcb;
;;;370
;;;371
;;;372 OSTimeTickHook(); /* Call user definable hook */
000510 ebfffffe BL OSTimeTickHook
;;;373 #if OS_TIME_GET_SET_EN > 0
;;;374 OS_ENTER_CRITICAL(); /* Update the 32-bit tick counter */
000514 ef000002 SVC #0x2
;;;375 OSTime++;
000518 e59f533c LDR r5,|L1.2140|
00051c e5950030 LDR r0,[r5,#0x30] ; OSTime
000520 e2800001 ADD r0,r0,#1
000524 e5850030 STR r0,[r5,#0x30] ; OSTime
;;;376 OS_EXIT_CRITICAL();
000528 ef000003 SVC #0x3
;;;377 #endif
;;;378 if (OSRunning == TRUE) {
00052c e5d50008 LDRB r0,[r5,#8] ; OSRunning
000530 e3500001 CMP r0,#1
000534 1a00001f BNE |L1.1464|
;;;379 ptcb = OSTCBList; /* Point at first TCB in TCB list */
000538 e595402c LDR r4,[r5,#0x2c] ; OSTCBList
;;;380 while (ptcb->OSTCBPrio != OS_IDLE_PRIO) { /* Go through all TCBs in TCB list */
00053c ea00001a B |L1.1452|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -