📄 os_core.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 947] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\os_core.o --device=DARMP -O0 -IC:\Keil\ARM\INC\Philips ..\Source\OS_CORE.C]
ARM
AREA ||.text.7||, CODE, READONLY, ALIGN=2
OS_TaskIdle PROC
;;;777 void OS_TaskIdle (void *pdata)
;;;778 {
|L1.0|
000000 e92d4010 PUSH {r4,lr}
000004 e1a04000 MOV r4,r0
;;;779 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;780 OS_CPU_SR cpu_sr;
;;;781 #endif
;;;782
;;;783
;;;784 pdata = pdata; /* Prevent compiler warning for not using 'pdata' */
000008 e1a00000 MOV r0,r0
;;;785 for (;;) {
00000c e1a00000 MOV r0,r0
;;;786 OS_ENTER_CRITICAL();
|L1.16|
000010 ef000002 SVC 0x2 ; formerly SWI
;;;787 OSIdleCtr++;
000014 e59f08a0 LDR r0,|L1.2236|
000018 e5900000 LDR r0,[r0,#0] ; OSIdleCtr
00001c e2800001 ADD r0,r0,#1
000020 e59f1894 LDR r1,|L1.2236|
000024 e5810000 STR r0,[r1,#0] ; OSIdleCtr
;;;788 OS_EXIT_CRITICAL();
000028 ef000003 SVC 0x3 ; formerly SWI
;;;789 OSTaskIdleHook(); /* Call user definable HOOK */
00002c ebfffffe BL OSTaskIdleHook
000030 eafffff6 B |L1.16|
;;;790 }
;;;791 }
ENDP
OSInit PROC
;;;72 void OSInit (void)
;;;73 {
000034 e92d47f0 PUSH {r4-r10,lr}
;;;74 INT16U i;
;;;75 INT8U *prdytbl;
;;;76 OS_TCB *ptcb1;
;;;77 OS_TCB *ptcb2;
;;;78 #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 1)
;;;79 OS_EVENT *pevent1;
;;;80 OS_EVENT *pevent2;
;;;81 #endif
;;;82
;;;83
;;;84 #if OS_VERSION >= 204
;;;85 OSInitHookBegin(); /* Call port specific initialization code */
000038 ebfffffe BL OSInitHookBegin
;;;86 #endif
;;;87
;;;88 #if OS_TIME_GET_SET_EN > 0
;;;89 OSTime = 0L; /* Clear the 32-bit system clock */
00003c e3a00000 MOV r0,#0
000040 e59f1878 LDR r1,|L1.2240|
000044 e5810000 STR r0,[r1,#0] ; OSTime
;;;90 #endif
;;;91 OSIntNesting = 0; /* Clear the interrupt nesting counter */
000048 e59f1874 LDR r1,|L1.2244|
00004c e5c10000 STRB r0,[r1,#0] ; OSIntNesting
;;;92 OSLockNesting = 0; /* Clear the scheduling lock counter */
000050 e59f1870 LDR r1,|L1.2248|
000054 e5c10000 STRB r0,[r1,#0] ; OSLockNesting
;;;93 OSTaskCtr = 0; /* Clear the number of tasks */
000058 e59f186c LDR r1,|L1.2252|
00005c e5c10000 STRB r0,[r1,#0] ; OSTaskCtr
;;;94 OSRunning = FALSE; /* Indicate that multitasking not started */
000060 e59f1868 LDR r1,|L1.2256|
000064 e5c10000 STRB r0,[r1,#0] ; OSRunning
;;;95 OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
000068 e59f184c LDR r1,|L1.2236|
00006c e5810000 STR r0,[r1,#0] ; OSIdleCtr
;;;96 #if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
;;;97 OSIdleCtrRun = 0L;
;;;98 OSIdleCtrMax = 0L;
;;;99 OSStatRdy = FALSE; /* Statistic task is not ready */
;;;100 #endif
;;;101 OSCtxSwCtr = 0; /* Clear the context switch counter */
000070 e59f185c LDR r1,|L1.2260|
000074 e5810000 STR r0,[r1,#0] ; OSCtxSwCtr
;;;102 OSRdyGrp = 0x00; /* Clear the ready list */
000078 e59f1858 LDR r1,|L1.2264|
00007c e5c10000 STRB r0,[r1,#0] ; OSRdyGrp
;;;103 prdytbl = &OSRdyTbl[0];
000080 e59f5854 LDR r5,|L1.2268|
;;;104 for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
000084 e3a04000 MOV r4,#0
000088 ea000003 B |L1.156|
;;;105 *prdytbl++ = 0x00;
|L1.140|
00008c e3a00000 MOV r0,#0
000090 e4c50001 STRB r0,[r5],#1
000094 e2840001 ADD r0,r4,#1 ;104
000098 e3c04801 BIC r4,r0,#0x10000 ;104
|L1.156|
00009c e3540002 CMP r4,#2 ;104
0000a0 bafffff9 BLT |L1.140| ;104
;;;106 }
;;;107
;;;108 OSPrioCur = 0;
0000a4 e3a00000 MOV r0,#0
0000a8 e59f1830 LDR r1,|L1.2272|
0000ac e5c10000 STRB r0,[r1,#0] ; OSPrioCur
;;;109 OSPrioHighRdy = 0;
0000b0 e59f182c LDR r1,|L1.2276|
0000b4 e5c10000 STRB r0,[r1,#0] ; OSPrioHighRdy
;;;110 OSTCBHighRdy = (OS_TCB *)0; /* TCB Initialization */
0000b8 e59f1828 LDR r1,|L1.2280|
0000bc e5810000 STR r0,[r1,#0] ; OSTCBHighRdy
;;;111 OSTCBCur = (OS_TCB *)0;
0000c0 e59f1824 LDR r1,|L1.2284|
0000c4 e5810000 STR r0,[r1,#0] ; OSTCBCur
;;;112 OSTCBList = (OS_TCB *)0;
0000c8 e59f1820 LDR r1,|L1.2288|
0000cc e5810000 STR r0,[r1,#0] ; OSTCBList
;;;113 for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
0000d0 e3a04000 MOV r4,#0
0000d4 ea000004 B |L1.236|
;;;114 OSTCBPrioTbl[i] = (OS_TCB *)0;
|L1.216|
0000d8 e3a00000 MOV r0,#0
0000dc e59f1810 LDR r1,|L1.2292|
0000e0 e7810104 STR r0,[r1,r4,LSL #2]
0000e4 e2840001 ADD r0,r4,#1 ;113
0000e8 e3c04801 BIC r4,r0,#0x10000 ;113
|L1.236|
0000ec e354000d CMP r4,#0xd ;113
0000f0 bafffff8 BLT |L1.216| ;113
;;;115 }
;;;116 ptcb1 = &OSTCBTbl[0];
0000f4 e59f67fc LDR r6,|L1.2296|
;;;117 ptcb2 = &OSTCBTbl[1];
0000f8 e2867024 ADD r7,r6,#0x24
;;;118 for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
0000fc e3a04000 MOV r4,#0
000100 ea000004 B |L1.280|
;;;119 ptcb1->OSTCBNext = ptcb2;
|L1.260|
000104 e5867004 STR r7,[r6,#4]
;;;120 ptcb1++;
000108 e2866024 ADD r6,r6,#0x24
;;;121 ptcb2++;
00010c e2877024 ADD r7,r7,#0x24
000110 e2840001 ADD r0,r4,#1 ;118
000114 e3c04801 BIC r4,r0,#0x10000 ;118
|L1.280|
000118 e354000b CMP r4,#0xb ;118
00011c bafffff8 BLT |L1.260| ;118
;;;122 }
;;;123 ptcb1->OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
000120 e3a00000 MOV r0,#0
000124 e5860004 STR r0,[r6,#4]
;;;124 OSTCBFreeList = &OSTCBTbl[0];
000128 e59f07c8 LDR r0,|L1.2296|
00012c e59f17c8 LDR r1,|L1.2300|
000130 e5810000 STR r0,[r1,#0] ; OSTCBFreeList
;;;125
;;;126 #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
;;;127 #if OS_MAX_EVENTS == 1
;;;128 OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
;;;129 OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
;;;130 OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
;;;131 #else
;;;132 pevent1 = &OSEventTbl[0];
000134 e59f87c4 LDR r8,|L1.2304|
;;;133 pevent2 = &OSEventTbl[1];
000138 e288900c ADD r9,r8,#0xc
;;;134 for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */
00013c e3a04000 MOV r4,#0
000140 ea000006 B |L1.352|
;;;135 pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
|L1.324|
000144 e3a00000 MOV r0,#0
000148 e5c80000 STRB r0,[r8,#0]
;;;136 pevent1->OSEventPtr = pevent2;
00014c e5889004 STR r9,[r8,#4]
;;;137 pevent1++;
000150 e288800c ADD r8,r8,#0xc
;;;138 pevent2++;
000154 e289900c ADD r9,r9,#0xc
000158 e2840001 ADD r0,r4,#1 ;134
00015c e3c04801 BIC r4,r0,#0x10000 ;134
|L1.352|
000160 e3540001 CMP r4,#1 ;134
000164 bafffff6 BLT |L1.324| ;134
;;;139 }
;;;140 pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
000168 e3a00000 MOV r0,#0
00016c e5c80000 STRB r0,[r8,#0]
;;;141 pevent1->OSEventPtr = (OS_EVENT *)0;
000170 e5880004 STR r0,[r8,#4]
;;;142 OSEventFreeList = &OSEventTbl[0];
000174 e59f0784 LDR r0,|L1.2304|
000178 e59f1784 LDR r1,|L1.2308|
00017c e5810000 STR r0,[r1,#0] ; OSEventFreeList
;;;143 #endif
;;;144 #endif
;;;145
;;;146 #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;147 OS_FlagInit(); /* Initialize the event flag structures */
000180 ebfffffe BL OS_FlagInit
;;;148 #endif
;;;149
;;;150 #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
;;;151 OS_QInit(); /* Initialize the message queue structures */
000184 ebfffffe BL OS_QInit
;;;152 #endif
;;;153
;;;154 #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
;;;155 OS_MemInit(); /* Initialize the memory manager */
000188 ebfffffe BL OS_MemInit
;;;156 #endif
;;;157
;;;158 /* ------------------------------------- CREATION OF 'IDLE' TASK --------------------------------------- */
;;;159 #if OS_TASK_CREATE_EXT_EN > 0
;;;160 #if OS_STK_GROWTH == 1
;;;161 (void)OSTaskCreateExt(OS_TaskIdle,
;;;162 (void *)0, /* No arguments passed to OS_TaskIdle() */
;;;163 &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack */
;;;164 OS_IDLE_PRIO, /* Lowest priority level */
;;;165 OS_TASK_IDLE_ID,
;;;166 &OSTaskIdleStk[0], /* Set Bottom-Of-Stack */
;;;167 OS_TASK_IDLE_STK_SIZE,
;;;168 (void *)0, /* No TCB extension */
;;;169 OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
;;;170 #else
;;;171 (void)OSTaskCreateExt(OS_TaskIdle,
;;;172 (void *)0, /* No arguments passed to OS_TaskIdle() */
;;;173 &OSTaskIdleStk[0], /* Set Top-Of-Stack */
;;;174 OS_IDLE_PRIO, /* Lowest priority level */
;;;175 OS_TASK_IDLE_ID,
;;;176 &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack */
;;;177 OS_TASK_IDLE_STK_SIZE,
;;;178 (void *)0, /* No TCB extension */
;;;179 OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
;;;180 #endif
;;;181 #else
;;;182 #if OS_STK_GROWTH == 1
;;;183 (void)OSTaskCreate(OS_TaskIdle,
00018c e3a0300c MOV r3,#0xc
000190 e59f2770 LDR r2,|L1.2312|
000194 e3a01000 MOV r1,#0
000198 e24f0e1a ADR r0,|L1.0|
00019c ebfffffe BL OSTaskCreate
;;;184 (void *)0,
;;;185 &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
;;;186 OS_IDLE_PRIO);
;;;187 #else
;;;188 (void)OSTaskCreate(OS_TaskIdle,
;;;189 (void *)0,
;;;190 &OSTaskIdleStk[0],
;;;191 OS_IDLE_PRIO);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -