📄 os_core.txt
字号:
;;;1380 }
ENDP
OS_InitTaskIdle PROC
;;;970 static void OS_InitTaskIdle (void)
;;;971 {
000408 e52de004 PUSH {lr}
00040c e24dd01c SUB sp,sp,#0x1c
;;;972 #if OS_TASK_NAME_SIZE > 7
;;;973 INT8U err;
;;;974 #endif
;;;975
;;;976
;;;977 #if OS_TASK_CREATE_EXT_EN > 0
;;;978 #if OS_STK_GROWTH == 1
;;;979 (void)OSTaskCreateExt(OS_TaskIdle,
000410 e3a03003 MOV r3,#3
000414 e3a02000 MOV r2,#0
000418 e3a01080 MOV r1,#0x80
00041c e59f019c LDR r0,|L1.1472|
000420 e98d000f STMIB sp,{r0-r3}
000424 e59f3198 LDR r3,|L1.1476|
000428 e58d3000 STR r3,[sp,#0]
00042c e3a0301f MOV r3,#0x1f
000430 e2802f7f ADD r2,r0,#0x1fc
000434 e3a01000 MOV r1,#0
000438 e24f0070 ADR r0,OS_TaskIdle
00043c ebfffffe BL OSTaskCreateExt
;;;980 (void *)0, /* No arguments passed to OS_TaskIdle() */
;;;981 &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack */
;;;982 OS_TASK_IDLE_PRIO, /* Lowest priority level */
;;;983 OS_TASK_IDLE_ID,
;;;984 &OSTaskIdleStk[0], /* Set Bottom-Of-Stack */
;;;985 OS_TASK_IDLE_STK_SIZE,
;;;986 (void *)0, /* No TCB extension */
;;;987 OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
;;;988 #else
;;;989 (void)OSTaskCreateExt(OS_TaskIdle,
;;;990 (void *)0, /* No arguments passed to OS_TaskIdle() */
;;;991 &OSTaskIdleStk[0], /* Set Top-Of-Stack */
;;;992 OS_TASK_IDLE_PRIO, /* Lowest priority level */
;;;993 OS_TASK_IDLE_ID,
;;;994 &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack */
;;;995 OS_TASK_IDLE_STK_SIZE,
;;;996 (void *)0, /* No TCB extension */
;;;997 OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
;;;998 #endif
;;;999 #else
;;;1000 #if OS_STK_GROWTH == 1
;;;1001 (void)OSTaskCreate(OS_TaskIdle,
;;;1002 (void *)0,
;;;1003 &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
;;;1004 OS_TASK_IDLE_PRIO);
;;;1005 #else
;;;1006 (void)OSTaskCreate(OS_TaskIdle,
;;;1007 (void *)0,
;;;1008 &OSTaskIdleStk[0],
;;;1009 OS_TASK_IDLE_PRIO);
;;;1010 #endif
;;;1011 #endif
;;;1012
;;;1013 #if OS_TASK_NAME_SIZE > 14
;;;1014 OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"uC/OS-II Idle", &err);
000440 e28d2018 ADD r2,sp,#0x18
000444 e28f1f5f ADR r1,|L1.1480|
000448 e3a0001f MOV r0,#0x1f
00044c ebfffffe BL OSTaskNameSet
;;;1015 #else
;;;1016 #if OS_TASK_NAME_SIZE > 7
;;;1017 OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"OS-Idle", &err);
;;;1018 #endif
;;;1019 #endif
;;;1020 }
000450 e28dd01c ADD sp,sp,#0x1c
000454 e49de004 POP {lr}
000458 e12fff1e BX lr
ENDP
OS_MemClr PROC
;;;1152 {
;;;1153 while (size > 0) {
00045c ea000004 B |L1.1140|
|L1.1120|
;;;1154 *pdest++ = (INT8U)0;
000460 e3a02000 MOV r2,#0
000464 e4c02001 STRB r2,[r0],#1
;;;1155 size--;
000468 e2412001 SUB r2,r1,#1
00046c e1a01802 LSL r1,r2,#16
000470 e1a01821 LSR r1,r1,#16
|L1.1140|
000474 e3510000 CMP r1,#0
000478 cafffff8 BGT |L1.1120|
;;;1156 }
;;;1157 }
00047c e12fff1e BX lr
ENDP
OS_InitEventList PROC
;;;843 static void OS_InitEventList (void)
;;;844 {
000480 e92d4030 PUSH {r4,r5,lr}
;;;845 #if OS_EVENT_EN && (OS_MAX_EVENTS > 0)
;;;846 #if (OS_MAX_EVENTS > 1)
;;;847 INT16U i;
;;;848 OS_EVENT *pevent1;
;;;849 OS_EVENT *pevent2;
;;;850
;;;851
;;;852 OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl)); /* Clear the event table */
000484 e3a01d05 MOV r1,#0x140
000488 e59f0148 LDR r0,|L1.1496|
00048c ebfffffe BL OS_MemClr
;;;853 pevent1 = &OSEventTbl[0];
000490 e59f5140 LDR r5,|L1.1496|
;;;854 pevent2 = &OSEventTbl[1];
000494 e2854020 ADD r4,r5,#0x20
;;;855 for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
000498 e3a03000 MOV r3,#0
00049c ea00000a B |L1.1228|
|L1.1184|
;;;856 pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
0004a0 e3a00000 MOV r0,#0
0004a4 e5c50000 STRB r0,[r5,#0]
;;;857 pevent1->OSEventPtr = pevent2;
0004a8 e5854004 STR r4,[r5,#4]
;;;858 #if OS_EVENT_NAME_SIZE > 1
;;;859 pevent1->OSEventName[0] = '?'; /* Unknown name */
0004ac e3a0003f MOV r0,#0x3f
0004b0 e5c5000f STRB r0,[r5,#0xf]
;;;860 pevent1->OSEventName[1] = OS_ASCII_NUL;
0004b4 e3a00000 MOV r0,#0
0004b8 e5c50010 STRB r0,[r5,#0x10]
;;;861 #endif
;;;862 pevent1++;
0004bc e2855020 ADD r5,r5,#0x20
;;;863 pevent2++;
0004c0 e2844020 ADD r4,r4,#0x20
0004c4 e2830001 ADD r0,r3,#1
0004c8 e3c03801 BIC r3,r0,#0x10000
|L1.1228|
0004cc e3530009 CMP r3,#9
0004d0 bafffff2 BLT |L1.1184|
;;;864 }
;;;865 pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
0004d4 e3a00000 MOV r0,#0
0004d8 e5c50000 STRB r0,[r5,#0]
;;;866 pevent1->OSEventPtr = (OS_EVENT *)0;
0004dc e5850004 STR r0,[r5,#4]
;;;867 #if OS_EVENT_NAME_SIZE > 1
;;;868 pevent1->OSEventName[0] = '?';
0004e0 e3a0003f MOV r0,#0x3f
0004e4 e5c5000f STRB r0,[r5,#0xf]
;;;869 pevent1->OSEventName[1] = OS_ASCII_NUL;
0004e8 e3a00000 MOV r0,#0
0004ec e5c50010 STRB r0,[r5,#0x10]
;;;870 #endif
;;;871 OSEventFreeList = &OSEventTbl[0];
0004f0 e59f00e0 LDR r0,|L1.1496|
0004f4 e59f10e0 LDR r1,|L1.1500|
0004f8 e5810000 STR r0,[r1,#0] ; OSEventFreeList
;;;872 #else
;;;873 OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
;;;874 OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
;;;875 OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
;;;876 #if OS_EVENT_NAME_SIZE > 1
;;;877 OSEventFreeList->OSEventName[0] = '?'; /* Unknown name */
;;;878 OSEventFreeList->OSEventName[1] = OS_ASCII_NUL;
;;;879 #endif
;;;880 #endif
;;;881 #endif
;;;882 }
0004fc e8bd4030 POP {r4,r5,lr}
000500 e12fff1e BX lr
ENDP
OS_InitTCBList PROC
;;;1102 static void OS_InitTCBList (void)
;;;1103 {
000504 e92d4030 PUSH {r4,r5,lr}
;;;1104 INT8U i;
;;;1105 OS_TCB *ptcb1;
;;;1106 OS_TCB *ptcb2;
;;;1107
;;;1108
;;;1109 OS_MemClr((INT8U *)&OSTCBTbl[0], sizeof(OSTCBTbl)); /* Clear all the TCBs */
000508 e3a01e42 MOV r1,#0x420
00050c e59f00cc LDR r0,|L1.1504|
000510 ebfffffe BL OS_MemClr
;;;1110 OS_MemClr((INT8U *)&OSTCBPrioTbl[0], sizeof(OSTCBPrioTbl)); /* Clear the priority table */
000514 e3a01080 MOV r1,#0x80
000518 e59f0070 LDR r0,|L1.1424|
00051c ebfffffe BL OS_MemClr
;;;1111 ptcb1 = &OSTCBTbl[0];
000520 e59f50b8 LDR r5,|L1.1504|
;;;1112 ptcb2 = &OSTCBTbl[1];
000524 e2854058 ADD r4,r5,#0x58
;;;1113 for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
000528 e3a03000 MOV r3,#0
00052c ea000008 B |L1.1364|
|L1.1328|
;;;1114 ptcb1->OSTCBNext = ptcb2;
000530 e5854014 STR r4,[r5,#0x14]
;;;1115 #if OS_TASK_NAME_SIZE > 1
;;;1116 ptcb1->OSTCBTaskName[0] = '?'; /* Unknown name */
000534 e3a0003f MOV r0,#0x3f
000538 e5c50048 STRB r0,[r5,#0x48]
;;;1117 ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
00053c e3a00000 MOV r0,#0
000540 e5c50049 STRB r0,[r5,#0x49]
;;;1118 #endif
;;;1119 ptcb1++;
000544 e2855058 ADD r5,r5,#0x58
;;;1120 ptcb2++;
000548 e2844058 ADD r4,r4,#0x58
00054c e2830001 ADD r0,r3,#1
000550 e20030ff AND r3,r0,#0xff
|L1.1364|
000554 e353000b CMP r3,#0xb
000558 3afffff4 BCC |L1.1328|
;;;1121 }
;;;1122 ptcb1->OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
00055c e3a00000 MOV r0,#0
000560 e5850014 STR r0,[r5,#0x14]
;;;1123 #if OS_TASK_NAME_SIZE > 1
;;;1124 ptcb1->OSTCBTaskName[0] = '?'; /* Unknown name */
000564 e3a0003f MOV r0,#0x3f
000568 e5c50048 STRB r0,[r5,#0x48]
;;;1125 ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
00056c e3a00000 MOV r0,#0
000570 e5c50049 STRB r0,[r5,#0x49]
;;;1126 #endif
;;;1127 OSTCBList = (OS_TCB *)0; /* TCB lists initializations */
000574 e59f1068 LDR r1,|L1.1508|
000578 e5810000 STR r0,[r1,#0] ; OSTCBList
;;;1128 OSTCBFreeList = &OSTCBTbl[0];
00057c e59f005c LDR r0,|L1.1504|
000580 e59f1060 LDR r1,|L1.1512|
000584 e5810000 STR r0,[r1,#0] ; OSTCBFreeList
;;;1129 }
000588 e8bd4030 POP {r4,r5,lr}
00058c e12fff1e BX lr
|L1.1424|
000590 00000000 DCD OSTCBPrioTbl
|L1.1428|
000594 00000000 DCD OSStatRdy
|L1.1432|
000598 00000000 DCD OSIdleCtrMax
|L1.1436|
00059c 00000000 DCD OSIdleCtr
|L1.1440|
0005a0 00000000 DCD OSIdleCtrRun
|L1.1444|
0005a4 00000000 DCD OSCPUUsage
|L1.1448|
0005a8 00000000 DCD OSTaskStatStk
|L1.1452|
0005ac 0000fffe DCD 0x0000fffe
|L1.1456|
0005b0 75432f4f DCB "uC/O"
0005b4 532d4949 DCB "S-II"
0005b8 20537461 DCB " Sta"
0005bc 74000000 DCB "t\0\0\0"
|L1.1472|
0005c0 00000000 DCD OSTaskIdleStk
|L1.1476|
0005c4 0000ffff DCD 0x0000ffff
|L1.1480|
0005c8 75432f4f DCB "uC/O"
0005cc 532d4949 DCB "S-II"
0005d0 2049646c DCB " Idl"
0005d4 65000000 DCB "e\0\0\0"
|L1.1496|
0005d8 00000000 DCD OSEventTbl
|L1.1500|
0005dc 00000000 DCD OSEventFreeList
|L1.1504|
0005e0 00000000 DCD OSTCBTbl
|L1.1508|
0005e4 00000000 DCD OSTCBList
|L1.1512|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -