📄 port.lst
字号:
139:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** pxTopOfStack--;
140:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack = ( portSTACK_TYPE ) 0x01010101; /* R1 */
117 , .L3+48
118 0052 134B .LVL16:
119 .loc 1 139 0
120 sub r1, r1, #4
121 0054 0439 .loc 1 140 0
122 str r3, [r1]
123 0056 0B60 .loc 1 141 0
141:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** pxTopOfStack--;
124 , r0
125 0058 031C .LVL17:
126 sub r3, r3, #60
127 005a 3C3B .loc 1 145 0
142:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
143:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* When the task starts is will expect to find the function parameter in
144:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** R0. */
145:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R0 */
128 r2, [r3]
129 005c 1A60 .loc 1 146 0
146:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** pxTopOfStack--;
130 ov r2, r0
131 005e 021C .LVL18:
132 sub r2, r2, #64
133 0060 403A .loc 1 155 0
147:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
148:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* The last thing onto the stack is the status register, which is set for
149:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** system mode, with interrupts enabled. */
150:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack = ( portSTACK_TYPE ) portINITIAL_SPSR;
151:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
152:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** #ifdef THUMB_INTERWORK
153:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** {
154:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* We want the task to start in thumb mode. */
155:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack |= portTHUMB_MODE_BIT;
134 r3, #63
135 0062 3F23 .LVL19:
136 str r3, [r2]
137 0064 1360 .loc 1 159 0
156:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** }
157:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** #endif
158:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
159:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** pxTopOfStack--;
138 r0, r0, #68
139 0066 4438 .LVL20:
140 .loc 1 165 0
160:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
161:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Some optimisation levels use the stack differently to others. This
162:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** means the interrupt flags cannot always be stored on the stack and will
163:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** instead be stored in a variable, which is then saved as part of the
164:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** tasks context. */
165:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack = portNO_CRITICAL_SECTION_NESTING;
141 v r3, #0
142 0068 0023 .loc 1 100 0
143 @ lr needed for prologue
144 .loc 1 165 0
145 str r3, [r0]
146 006a 0360 .LVL21:
147 .loc 1 168 0
166:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
167:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** return pxTopOfStack;
168:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** }
148 eeded for prologue
149 bx lr
150 006c 7047 .L4:
151 .align 2
152 006e 0000 .L3:
153 .word -1431655766
154 0070 AAAAAAAA .word 303174162
155 0074 12121212 .word 286331153
156 0078 11111111 .word 269488144
157 007c 10101010 .word 151587081
158 0080 09090909 .word 134744072
159 0084 08080808 .word 117901063
160 0088 07070707 .word 101058054
161 008c 06060606 .word 84215045
162 0090 05050505 .word 67372036
163 0094 04040404 .word 50529027
164 0098 03030303 .word 33686018
165 009c 02020202 .word 16843009
166 00a0 01010101 .LFE2:
168 .align 2
169 .global vPortEndScheduler
170 .code 16
171 .thumb_func
173 vPortEndScheduler:
174 .LFB4:
175 .loc 1 186 0
169:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /*-----------------------------------------------------------*/
170:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
171:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** portBASE_TYPE xPortStartScheduler( void )
172:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** {
173:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Start the timer that generates the tick ISR. Interrupts are disabled
174:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** here already. */
175:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** prvSetupTimerInterrupt();
176:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
177:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Start the first task. */
178:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** vPortISRStartFirstTask();
179:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
180:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Should not get here! */
181:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** return 0;
182:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** }
183:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /*-----------------------------------------------------------*/
184:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
185:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** void vPortEndScheduler( void )
186:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** {
176 loc 1 189 0
177 @ sp needed for prologue
187:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* It is unlikely that the ARM port will require this function as there
188:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** is nothing to return to. */
189:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** }
178 x lr
179 .LFE4:
181 .align 2
182 .global xPortStartScheduler
183 00a6 0000 .code 16
184 .thumb_func
186 xPortStartScheduler:
187 .LFB3:
188 .loc 1 172 0
189 push {lr}
190 .LCFI0:
191 00a8 00B5 .LBB4:
192 .LBB5:
193 .loc 1 201 0
194 ldr r3, .L9
190:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /*-----------------------------------------------------------*/
191:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
192:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /*
193:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** * Setup the timer 0 to generate the tick interrupts at the required frequency.
194:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** */
195:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** static void prvSetupTimerInterrupt( void )
196:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** {
197:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** unsigned portLONG ulCompareMatch;
198:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
199:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* A 1ms tick does not require the use of the timer prescale. This is
200:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** defaulted to zero but can be used if necessary. */
201:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** T0PR = portPRESCALE_VALUE;
195 r2, [r3]
196 00aa 104B .loc 1 213 0
197 00ac 0022 ldr r2, .L9+4
198 00ae 1A60 add r3, r3, #12
202:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
203:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Calculate the match value required for our wanted tick rate. */
204:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** ulCompareMatch = configCPU_CLOCK_HZ / configTICK_RATE_HZ;
205:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
206:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Protect against divide by zero. Using an if() statement still results
207:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** in a warning - hence the #if. */
208:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** #if portPRESCALE_VALUE != 0
209:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** {
210:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** ulCompareMatch /= ( portPRESCALE_VALUE + 1 );
211:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** }
212:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** #endif
213:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** T0MR0 = ulCompareMatch;
199 r2, [r3]
200 00b0 0F4A .loc 1 216 0
201 00b2 0C33 mov r2, #3
202 00b4 1A60 sub r3, r3, #4
214:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
215:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Generate tick with timer 0 compare match. */
216:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** T0MCR = portRESET_COUNT_ON_MATCH | portINTERRUPT_ON_MATCH;
203 r2, [r3]
204 00b6 0322 .loc 1 219 0
205 00b8 043B ldr r2, .L9+8
206 00ba 1A60 ldr r3, [r2]
217:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
218:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Setup the VIC for the timer. */
219:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** VICIntSelect &= ~( portTIMER_VIC_CHANNEL_BIT );
207 r1, #16
208 00bc 0D4A bic r3, r3, r1
209 00be 1368 str r3, [r2]
210 00c0 1021 .loc 1 220 0
211 00c2 8B43 add r2, r2, #4
212 00c4 1360 ldr r3, [r2]
220:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** VICIntEnable |= portTIMER_VIC_CHANNEL_BIT;
213 3, r3, r1
214 00c6 0432 str r3, [r2]
215 00c8 1368 .loc 1 227 0
216 00ca 0B43 ldr r2, .L9+12
217 00cc 1360 ldr r3, .L9+16
221:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
222:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* The ISR installed depends on whether the preemptive or cooperative
223:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** scheduler is being used. */
224:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** #if configUSE_PREEMPTION == 1
225:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** {
226:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** extern void ( vPreemptiveTick )( void );
227:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** VICVectAddr0 = ( portLONG ) vPreemptiveTick;
218 r2, [r3]
219 00ce 0A4A .loc 1 236 0
220 00d0 0A4B ldr r3, .L9+20
221 00d2 1A60 mov r2, #36
228:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** }
229:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** #else
230:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** {
231:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** extern void ( vNonPreemptiveTick )( void );
232:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** VICVectAddr0 = ( portLONG ) vNonPreemptiveTick;
233:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** }
234:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** #endif
235:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
236:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** VICVectCntl0 = portTIMER_VIC_CHANNEL | portTIMER_VIC_ENABLE;
222 r2, [r3]
223 00d4 0A4B .loc 1 240 0
224 00d6 2422 ldr r3, .L9+24
225 00d8 1A60 mov r2, #1
237:rtos/Source/portable/GCC/ARM7_LPC2000/port.c ****
238:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Start the timer - interrupts are disabled when this function is called
239:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** so it is okay to do this here. */
240:rtos/Source/portable/GCC/ARM7_LPC2000/port.c **** T0TCR = portENABLE_TIMER;
226 r2, [r3]
227 00da 0A4B .LBE5:
228 00dc 0122 .LBE4:
229 00de 1A60 .loc 1 178 0
230 bl vPortISRStartFirstTask
231 .loc 1 182 0
232 mov r0, #0
233 00e0 FFF7FEFF @ sp needed for prologue
234 pop {r1}
235 00e4 0020 bx r1
236 .L10:
237 00e6 02BC .align 2
238 00e8 0847 .L9:
239 .word -536854516
240 00ea 0000 .word 7500
241 .word -4084
242 00ec 0C4000E0 .word vPreemptiveTick
243 00f0 4C1D0000 .word -3840
244 00f4 0CF0FFFF .word -3584
245 00f8 00000000 .word -536854524
246 00fc 00F1FFFF .LFE3:
248 0104 044000E0 .section .debug_frame,"",%progbits
249 .Lframe0:
250 .4byte .LECIE0-.LSCIE0
298 .LLST1:
DEFINED SYMBOLS
*ABS*:00000000 port.c
c:\DOCUME~1\Reggie\LOCALS~1\Temp/cc2Laaaa.s:1 .text:00000000 $t
c:\DOCUME~1\Reggie\LOCALS~1\Temp/cc2Laaaa.s:16 .text:00000000 pxPortInitialiseStack
c:\DOCUME~1\Reggie\LOCALS~1\Temp/cc2Laaaa.s:154 .text:00000070 $d
c:\DOCUME~1\Reggie\LOCALS~1\Temp/cc2Laaaa.s:174 .text:000000a4 vPortEndScheduler
c:\DOCUME~1\Reggie\LOCALS~1\Temp/cc2Laaaa.s:171 .text:000000a4 $t
c:\DOCUME~1\Reggie\LOCALS~1\Temp/cc2Laaaa.s:188 .text:000000a8 xPortStartScheduler
c:\DOCUME~1\Reggie\LOCALS~1\Temp/cc2Laaaa.s:242 .text:000000ec $d
UNDEFINED SYMBOLS
vPortISRStartFirstTask
vPreemptiveTick
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -