📄 os_core.txt
字号:
00019c e59f2978 LDR r2,|L1.2844|
;;;624 pevent2 = &OSEventTbl[1];
0001a0 e282100c ADD r1,r2,#0xc
;;;625 for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
0001a4 e3a00000 MOV r0,#0
0001a8 ea000006 B |L1.456|
;;;626 pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
|L1.428|
0001ac e3a03000 MOV r3,#0
0001b0 e5c23000 STRB r3,[r2,#0]
;;;627 pevent1->OSEventPtr = pevent2;
0001b4 e5821004 STR r1,[r2,#4]
;;;628 pevent1++;
0001b8 e282200c ADD r2,r2,#0xc
;;;629 pevent2++;
0001bc e281100c ADD r1,r1,#0xc
0001c0 e2803001 ADD r3,r0,#1 ;625
0001c4 e3c30801 BIC r0,r3,#0x10000 ;625
|L1.456|
0001c8 e3500001 CMP r0,#1 ;625
0001cc bafffff6 BLT |L1.428| ;625
;;;630 }
;;;631 pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
0001d0 e3a03000 MOV r3,#0
0001d4 e5c23000 STRB r3,[r2,#0]
;;;632 pevent1->OSEventPtr = (OS_EVENT *)0;
0001d8 e5823004 STR r3,[r2,#4]
;;;633 OSEventFreeList = &OSEventTbl[0];
0001dc e59f3938 LDR r3,|L1.2844|
0001e0 e59fc938 LDR r12,|L1.2848|
0001e4 e58c3000 STR r3,[r12,#0] ; OSEventFreeList
;;;634 #else
;;;635 OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
;;;636 OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
;;;637 OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
;;;638 #endif
;;;639 #endif
;;;640 }
0001e8 e12fff1e BX lr
ENDP
OS_InitTCBList PROC
;;;836
;;;837 OSTCBList = (OS_TCB *)0; /* TCB Initialization */
0001ec e3a03000 MOV r3,#0
0001f0 e59fc92c LDR r12,|L1.2852|
0001f4 e58c3000 STR r3,[r12,#0] ; OSTCBList
;;;838 for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
0001f8 e3a00000 MOV r0,#0
0001fc ea000004 B |L1.532|
;;;839 OSTCBPrioTbl[i] = (OS_TCB *)0;
|L1.512|
000200 e3a03000 MOV r3,#0
000204 e59fc91c LDR r12,|L1.2856|
000208 e78c3100 STR r3,[r12,r0,LSL #2]
00020c e2803001 ADD r3,r0,#1 ;838
000210 e20300ff AND r0,r3,#0xff ;838
|L1.532|
000214 e350000d CMP r0,#0xd ;838
000218 bafffff8 BLT |L1.512| ;838
;;;840 }
;;;841 ptcb1 = &OSTCBTbl[0];
00021c e59f2908 LDR r2,|L1.2860|
;;;842 ptcb2 = &OSTCBTbl[1];
000220 e2821034 ADD r1,r2,#0x34
;;;843 for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
000224 e3a00000 MOV r0,#0
000228 ea000004 B |L1.576|
;;;844 ptcb1->OSTCBNext = ptcb2;
|L1.556|
00022c e5821014 STR r1,[r2,#0x14]
;;;845 ptcb1++;
000230 e2822034 ADD r2,r2,#0x34
;;;846 ptcb2++;
000234 e2811034 ADD r1,r1,#0x34
000238 e2803001 ADD r3,r0,#1 ;843
00023c e20300ff AND r0,r3,#0xff ;843
|L1.576|
000240 e350000c CMP r0,#0xc ;843
000244 bafffff8 BLT |L1.556| ;843
;;;847 }
;;;848 ptcb1->OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
000248 e3a03000 MOV r3,#0
00024c e5823014 STR r3,[r2,#0x14]
;;;849 OSTCBFreeList = &OSTCBTbl[0];
000250 e59f38d4 LDR r3,|L1.2860|
000254 e59fc8d4 LDR r12,|L1.2864|
000258 e58c3000 STR r3,[r12,#0] ; OSTCBFreeList
;;;850 }
00025c e12fff1e BX lr
ENDP
OS_InitRdyList PROC
;;;696
;;;697 OSRdyGrp = 0x00; /* Clear the ready list */
000260 e3a02000 MOV r2,#0
000264 e59f38c8 LDR r3,|L1.2868|
000268 e5c32000 STRB r2,[r3,#0] ; OSRdyGrp
;;;698 prdytbl = &OSRdyTbl[0];
00026c e59f08c4 LDR r0,|L1.2872|
;;;699 for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
000270 e3a01000 MOV r1,#0
000274 ea000003 B |L1.648|
;;;700 *prdytbl++ = 0x00;
|L1.632|
000278 e3a02000 MOV r2,#0
00027c e4c02001 STRB r2,[r0],#1
000280 e2812001 ADD r2,r1,#1 ;699
000284 e3c21801 BIC r1,r2,#0x10000 ;699
|L1.648|
000288 e3510002 CMP r1,#2 ;699
00028c bafffff9 BLT |L1.632| ;699
;;;701 }
;;;702
;;;703 OSPrioCur = 0;
000290 e3a02000 MOV r2,#0
000294 e59f38a0 LDR r3,|L1.2876|
000298 e5c32000 STRB r2,[r3,#0] ; OSPrioCur
;;;704 OSPrioHighRdy = 0;
00029c e59f389c LDR r3,|L1.2880|
0002a0 e5c32000 STRB r2,[r3,#0] ; OSPrioHighRdy
;;;705
;;;706 OSTCBHighRdy = (OS_TCB *)0;
0002a4 e59f3898 LDR r3,|L1.2884|
0002a8 e5832000 STR r2,[r3,#0] ; OSTCBHighRdy
;;;707 OSTCBCur = (OS_TCB *)0;
0002ac e59f3894 LDR r3,|L1.2888|
0002b0 e5832000 STR r2,[r3,#0] ; OSTCBCur
;;;708 }
0002b4 e12fff1e BX lr
ENDP
OS_InitMisc PROC
;;;657 #if OS_TIME_GET_SET_EN > 0
;;;658 OSTime = 0L; /* Clear the 32-bit system clock */
0002b8 e3a00000 MOV r0,#0
0002bc e59f1888 LDR r1,|L1.2892|
0002c0 e5810000 STR r0,[r1,#0] ; OSTime
;;;659 #endif
;;;660
;;;661 OSIntNesting = 0; /* Clear the interrupt nesting counter */
0002c4 e59f1884 LDR r1,|L1.2896|
0002c8 e5c10000 STRB r0,[r1,#0] ; OSIntNesting
;;;662 OSLockNesting = 0; /* Clear the scheduling lock counter */
0002cc e59f1880 LDR r1,|L1.2900|
0002d0 e5c10000 STRB r0,[r1,#0] ; OSLockNesting
;;;663
;;;664 OSTaskCtr = 0; /* Clear the number of tasks */
0002d4 e59f187c LDR r1,|L1.2904|
0002d8 e5c10000 STRB r0,[r1,#0] ; OSTaskCtr
;;;665
;;;666 OSRunning = FALSE; /* Indicate that multitasking not started */
0002dc e59f1878 LDR r1,|L1.2908|
0002e0 e5c10000 STRB r0,[r1,#0] ; OSRunning
;;;667
;;;668 OSCtxSwCtr = 0; /* Clear the context switch counter */
0002e4 e59f1874 LDR r1,|L1.2912|
0002e8 e5810000 STR r0,[r1,#0] ; OSCtxSwCtr
;;;669 OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
0002ec e59f1808 LDR r1,|L1.2812|
0002f0 e5810000 STR r0,[r1,#0] ; OSIdleCtr
;;;670
;;;671 #if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
;;;672 OSIdleCtrRun = 0L;
0002f4 e59f1804 LDR r1,|L1.2816|
0002f8 e5810000 STR r0,[r1,#0] ; OSIdleCtrRun
;;;673 OSIdleCtrMax = 0L;
0002fc e59f17f4 LDR r1,|L1.2808|
000300 e5810000 STR r0,[r1,#0] ; OSIdleCtrMax
;;;674 OSStatRdy = FALSE; /* Statistic task is not ready */
000304 e59f17e8 LDR r1,|L1.2804|
000308 e5c10000 STRB r0,[r1,#0] ; OSStatRdy
;;;675 #endif
;;;676 }
00030c e12fff1e BX lr
ENDP
OSInit PROC
;;;85 void OSInit (void)
;;;86 {
000310 e92d4010 PUSH {r4,lr}
;;;87 #if OS_VERSION >= 204
;;;88 OSInitHookBegin(); /* Call port specific initialization code */
000314 ebfffffe BL OSInitHookBegin
;;;89 #endif
;;;90
;;;91 OS_InitMisc(); /* Initialize miscellaneous variables */
000318 ebfffffe BL OS_InitMisc
;;;92
;;;93 OS_InitRdyList(); /* Initialize the Ready List */
00031c ebfffffe BL OS_InitRdyList
;;;94 OS_InitTCBList(); /* Initialize the free list of OS_TCBs */
000320 ebfffffe BL OS_InitTCBList
;;;95 OS_InitEventList(); /* Initialize the free list of OS_EVENTs */
000324 ebfffffe BL OS_InitEventList
;;;96
;;;97 #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;98 OS_FlagInit(); /* Initialize the event flag structures */
000328 ebfffffe BL OS_FlagInit
;;;99 #endif
;;;100
;;;101 #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
;;;102 OS_MemInit(); /* Initialize the memory manager */
00032c ebfffffe BL OS_MemInit
;;;103 #endif
;;;104
;;;105 #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
;;;106 OS_QInit(); /* Initialize the message queue structures */
000330 ebfffffe BL OS_QInit
;;;107 #endif
;;;108
;;;109 OS_InitTaskIdle(); /* Create the Idle Task */
000334 ebfffffe BL OS_InitTaskIdle
;;;110 #if OS_TASK_STAT_EN > 0
;;;111 OS_InitTaskStat(); /* Create the Statistic Task */
000338 ebfffffe BL OS_InitTaskStat
;;;112 #endif
;;;113
;;;114 #if OS_VERSION >= 204
;;;115 OSInitHookEnd(); /* Call port specific init. code */
00033c ebfffffe BL OSInitHookEnd
;;;116 #endif
;;;117 }
000340 e8bd4010 POP {r4,lr}
000344 e12fff1e BX lr
ENDP
OSIntEnter PROC
;;;145 {
;;;146 if (OSRunning == TRUE) {
000348 e59f080c LDR r0,|L1.2908|
00034c e5d00000 LDRB r0,[r0,#0] ; OSRunning
000350 e3500001 CMP r0,#1
000354 1a000008 BNE |L1.892|
;;;147 if (OSIntNesting < 255) {
000358 e59f07f0 LDR r0,|L1.2896|
00035c e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000360 e35000ff CMP r0,#0xff
000364 aa000004 BGE |L1.892|
;;;148 OSIntNesting++; /* Increment ISR nesting level */
000368 e59f07e0 LDR r0,|L1.2896|
00036c e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000370 e2800001 ADD r0,r0,#1
000374 e59f17d4 LDR r1,|L1.2896|
000378 e5c10000 STRB r0,[r1,#0] ; OSIntNesting
;;;149 }
;;;150 }
;;;151 }
|L1.892|
00037c e12fff1e BX lr
ENDP
OSIntExit PROC
;;;172 void OSIntExit (void)
;;;173 {
000380 e92d4010 PUSH {r4,lr}
;;;174 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;175 OS_CPU_SR cpu_sr;
;;;176 #endif
;;;177
;;;178
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -