📄 os_core.txt
字号:
;;;986 OS_TASK_IDLE_ID,
;;;987 &OSTaskIdleStk[0], /* Set Bottom-Of-Stack */
;;;988 OS_TASK_IDLE_STK_SIZE,
;;;989 (void *)0, /* No TCB extension */
;;;990 OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
;;;991 #else
;;;992 (void)OSTaskCreateExt(OS_TaskIdle,
;;;993 (void *)0, /* No arguments passed to OS_TaskIdle() */
;;;994 &OSTaskIdleStk[0], /* Set Top-Of-Stack */
;;;995 OS_TASK_IDLE_PRIO, /* Lowest priority level */
;;;996 OS_TASK_IDLE_ID,
;;;997 &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack */
;;;998 OS_TASK_IDLE_STK_SIZE,
;;;999 (void *)0, /* No TCB extension */
;;;1000 OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
;;;1001 #endif
;;;1002 #else
;;;1003 #if OS_STK_GROWTH == 1
;;;1004 (void)OSTaskCreate(OS_TaskIdle,
;;;1005 (void *)0,
;;;1006 &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
;;;1007 OS_TASK_IDLE_PRIO);
;;;1008 #else
;;;1009 (void)OSTaskCreate(OS_TaskIdle,
;;;1010 (void *)0,
;;;1011 &OSTaskIdleStk[0],
;;;1012 OS_TASK_IDLE_PRIO);
;;;1013 #endif
;;;1014 #endif
;;;1015
;;;1016 #if OS_TASK_NAME_SIZE > 14
;;;1017 OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"uC/OS-II Idle", &err);
000240 aa06 ADD r2,sp,#0x18
000242 a189 ADR r1,|L1.1128|
000244 201f MOVS r0,#0x1f
000246 f7fff7ff BL OSTaskNameSet
;;;1018 #else
;;;1019 #if OS_TASK_NAME_SIZE > 7
;;;1020 OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"OS-Idle", &err);
;;;1021 #endif
;;;1022 #endif
;;;1023 }
00024a b007 ADD sp,sp,#0x1c
00024c bd00 POP {pc}
;;;1024 /*$PAGE*/
ENDP
OS_MemClr PROC
;;;1155 {
;;;1156 while (size > 0) {
00024e 2900 CMP r1,#0
000250 d006 BEQ |L1.608|
000252 2200 MOVS r2,#0
|L1.596|
000254 f800f800 STRB r2,[r0],#1
000258 1e49 SUBS r1,r1,#1
;;;1157 *pdest++ = (INT8U)0;
;;;1158 size--;
00025a b289 UXTH r1,r1
00025c 2900 CMP r1,#0
00025e d1f9 BNE |L1.596|
|L1.608|
;;;1159 }
;;;1160 }
000260 4770 BX lr
;;;1161 /*$PAGE*/
ENDP
OS_InitEventList PROC
;;;846 static void OS_InitEventList (void)
;;;847 {
000262 b500 PUSH {lr}
;;;848 #if OS_EVENT_EN && (OS_MAX_EVENTS > 0)
;;;849 #if (OS_MAX_EVENTS > 1)
;;;850 INT16U i;
;;;851 OS_EVENT *pevent1;
;;;852 OS_EVENT *pevent2;
;;;853
;;;854
;;;855 OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl)); /* Clear the event table */
000264 f44ff44f MOV r1,#0x140
000268 4883 LDR r0,|L1.1144|
00026a f7fff7ff BL OS_MemClr
;;;856 pevent1 = &OSEventTbl[0];
00026e 4882 LDR r0,|L1.1144|
;;;857 pevent2 = &OSEventTbl[1];
000270 4686 MOV lr,r0
000272 f10ef10e ADD r2,lr,#0x20
;;;858 for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
000276 2100 MOVS r1,#0
000278 2300 MOVS r3,#0
00027a f04ff04f MOV r12,#0x3f
|L1.638|
;;;859 pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
00027e 7003 STRB r3,[r0,#0]
;;;860 pevent1->OSEventPtr = pevent2;
000280 6042 STR r2,[r0,#4]
;;;861 #if OS_EVENT_NAME_SIZE > 1
;;;862 pevent1->OSEventName[0] = '?'; /* Unknown name */
000282 f880f880 STRB r12,[r0,#0xf]
;;;863 pevent1->OSEventName[1] = OS_ASCII_NUL;
000286 7403 STRB r3,[r0,#0x10]
;;;864 #endif
;;;865 pevent1++;
000288 3020 ADDS r0,r0,#0x20
;;;866 pevent2++;
00028a 3220 ADDS r2,r2,#0x20
00028c 1c49 ADDS r1,r1,#1
00028e b289 UXTH r1,r1
000290 2909 CMP r1,#9
000292 d3f4 BCC |L1.638|
;;;867 }
;;;868 pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
000294 7003 STRB r3,[r0,#0]
;;;869 pevent1->OSEventPtr = (OS_EVENT *)0;
000296 6043 STR r3,[r0,#4]
;;;870 #if OS_EVENT_NAME_SIZE > 1
;;;871 pevent1->OSEventName[0] = '?';
000298 f880f880 STRB r12,[r0,#0xf]
;;;872 pevent1->OSEventName[1] = OS_ASCII_NUL;
00029c 7403 STRB r3,[r0,#0x10]
;;;873 #endif
;;;874 OSEventFreeList = &OSEventTbl[0];
00029e 486a LDR r0,|L1.1096|
0002a0 f8c0f8c0 STR lr,[r0,#0x10] ; OSEventFreeList
;;;875 #else
;;;876 OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
;;;877 OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
;;;878 OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
;;;879 #if OS_EVENT_NAME_SIZE > 1
;;;880 OSEventFreeList->OSEventName[0] = '?'; /* Unknown name */
;;;881 OSEventFreeList->OSEventName[1] = OS_ASCII_NUL;
;;;882 #endif
;;;883 #endif
;;;884 #endif
;;;885 }
0002a4 bd00 POP {pc}
;;;886 /*$PAGE*/
ENDP
OS_InitTCBList PROC
;;;1105 static void OS_InitTCBList (void)
;;;1106 {
0002a6 b500 PUSH {lr}
;;;1107 INT8U i;
;;;1108 OS_TCB *ptcb1;
;;;1109 OS_TCB *ptcb2;
;;;1110
;;;1111
;;;1112 OS_MemClr((INT8U *)&OSTCBTbl[0], sizeof(OSTCBTbl)); /* Clear all the TCBs */
0002a8 f44ff44f MOV r1,#0x630
0002ac 4873 LDR r0,|L1.1148|
0002ae f7fff7ff BL OS_MemClr
;;;1113 OS_MemClr((INT8U *)&OSTCBPrioTbl[0], sizeof(OSTCBPrioTbl)); /* Clear the priority table */
0002b2 2180 MOVS r1,#0x80
0002b4 4865 LDR r0,|L1.1100|
0002b6 f7fff7ff BL OS_MemClr
;;;1114 ptcb1 = &OSTCBTbl[0];
0002ba 4870 LDR r0,|L1.1148|
;;;1115 ptcb2 = &OSTCBTbl[1];
0002bc 4686 MOV lr,r0
0002be f10ef10e ADD r1,lr,#0x58
;;;1116 for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
0002c2 2200 MOVS r2,#0
0002c4 f04ff04f MOV r12,#0
0002c8 233f MOVS r3,#0x3f
|L1.714|
;;;1117 ptcb1->OSTCBNext = ptcb2;
0002ca 6141 STR r1,[r0,#0x14]
;;;1118 #if OS_TASK_NAME_SIZE > 1
;;;1119 ptcb1->OSTCBTaskName[0] = '?'; /* Unknown name */
0002cc f880f880 STRB r3,[r0,#0x48]
;;;1120 ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
0002d0 f880f880 STRB r12,[r0,#0x49]
;;;1121 #endif
;;;1122 ptcb1++;
0002d4 3058 ADDS r0,r0,#0x58
;;;1123 ptcb2++;
0002d6 3158 ADDS r1,r1,#0x58
0002d8 1c52 ADDS r2,r2,#1
0002da b2d2 UXTB r2,r2
0002dc 2a11 CMP r2,#0x11
0002de d3f4 BCC |L1.714|
;;;1124 }
;;;1125 ptcb1->OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
0002e0 f8c0f8c0 STR r12,[r0,#0x14]
;;;1126 #if OS_TASK_NAME_SIZE > 1
;;;1127 ptcb1->OSTCBTaskName[0] = '?'; /* Unknown name */
0002e4 f880f880 STRB r3,[r0,#0x48]
;;;1128 ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
0002e8 f880f880 STRB r12,[r0,#0x49]
;;;1129 #endif
;;;1130 OSTCBList = (OS_TCB *)0; /* TCB lists initializations */
0002ec 4856 LDR r0,|L1.1096|
0002ee f8c0f8c0 STR r12,[r0,#0x30] ; OSTCBList
;;;1131 OSTCBFreeList = &OSTCBTbl[0];
0002f2 f8c0f8c0 STR lr,[r0,#0x28] ; OSTCBFreeList
;;;1132 }
0002f6 bd00 POP {pc}
;;;1133 /*$PAGE*/
ENDP
OS_InitRdyList PROC
;;;945
;;;946 OSRdyGrp = 0; /* Clear the ready list */
0002f8 4b53 LDR r3,|L1.1096|
0002fa 2200 MOVS r2,#0
0002fc 719a STRB r2,[r3,#6] ; OSRdyGrp
;;;947 prdytbl = &OSRdyTbl[0];
0002fe f103f103 ADD r0,r3,#0x1c
;;;948 for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
000302 2100 MOVS r1,#0
|L1.772|
000304 f800f800 STRB r2,[r0],#1
000308 1c49 ADDS r1,r1,#1
00030a b2c9 UXTB r1,r1
00030c 2904 CMP r1,#4
00030e d3f9 BCC |L1.772|
;;;949 *prdytbl++ = 0;
;;;950 }
;;;951
;;;952 OSPrioCur = 0;
000310 711a STRB r2,[r3,#4] ; OSPrioCur
;;;953 OSPrioHighRdy = 0;
000312 715a STRB r2,[r3,#5] ; OSPrioHighRdy
;;;954
;;;955 OSTCBHighRdy = (OS_TCB *)0;
000314 62da STR r2,[r3,#0x2c] ; OSTCBHighRdy
;;;956 OSTCBCur = (OS_TCB *)0;
000316 625a STR r2,[r3,#0x24] ; OSTCBCur
;;;957 }
000318 4770 BX lr
;;;958
ENDP
OS_InitMisc PROC
;;;902 #if OS_TIME_GET_SET_EN > 0
;;;903 OSTime = 0L; /* Clear the 32-bit system clock */
00031a 494b LDR r1,|L1.1096|
00031c 2000 MOVS r0,#0
00031e 6348 STR r0,[r1,#0x34] ; OSTime
;;;904 #endif
;;;905
;;;906 OSIntNesting = 0; /* Clear the interrupt nesting counter */
000320 7088 STRB r0,[r1,#2] ; OSIntNesting
;;;907 OSLockNesting = 0; /* Clear the scheduling lock counter */
000322 70c8 STRB r0,[r1,#3] ; OSLockNesting
;;;908
;;;909 OSTaskCtr = 0; /* Clear the number of tasks */
000324 7208 STRB r0,[r1,#8] ; OSTaskCtr
;;;910
;;;911 OSRunning = OS_FALSE; /* Indicate that multitasking not started */
000326 71c8 STRB r0,[r1,#7] ; OSRunning
;;;912
;;;913 OSCtxSwCtr = 0; /* Clear the context switch counter */
000328 60c8 STR r0,[r1,#0xc] ; OSCtxSwCtr
;;;914 OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
00032a 6208 STR r0,[r1,#0x20] ; OSIdleCtr
;;;915
;;;916 #if OS_TASK_STAT_EN > 0
;;;917 OSIdleCtrRun = 0L;
00032c 6188 STR r0,[r1,#0x18] ; OSIdleCtrRun
;;;918 OSIdleCtrMax = 0L;
00032e 6148 STR r0,[r1,#0x14] ; OSIdleCtrMax
;;;919 OSStatRdy = OS_FALSE; /* Statistic task is not ready */
000330 7048 STRB r0,[r1,#1] ; OSStatRdy
;;;920 #endif
;;;921 }
000332 4770 BX lr
;;;922 /*$PAGE*/
ENDP
OSInit PROC
;;;246 void OSInit (void)
;;;247 {
000334 b510 PUSH {r4,lr}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -