📄 port.lst
字号:
\ 00000012 0140 AND R1,R0
\ 00000014 2980 STRH R1,[R5, #+0]
\ 00000016 FA20 MOV R0,#+0xFA
\ 00000018 8000 LSL R0,R0,#+0x2 ;; #+0x3E8
\ 0000001A ........ _BLF WDG_PeriodValueConfig,WDG_PeriodValueConfig??rT
\ 0000001E 0120 MOV R0,#+0x1
\ 00000020 1249 LDR R1,??xPortStartScheduler_0+0x10 ;; 0xfffff870
\ 00000022 0A68 LDR R2,[R1, #+0]
\ 00000024 120C LSR R2,R2,#+0x10
\ 00000026 1204 LSL R2,R2,#+0x10
\ 00000028 0243 ORR R2,R0
\ 0000002A 0A60 STR R2,[R1, #+0]
\ 0000002C 1049 LDR R1,??xPortStartScheduler_0+0x14 ;; 0xfffff820
\ 0000002E 0A68 LDR R2,[R1, #+0]
\ 00000030 1023 MOV R3,#+0x10
\ 00000032 1343 ORR R3,R2
\ 00000034 0B60 STR R3,[R1, #+0]
\ 00000036 0F49 LDR R1,??xPortStartScheduler_0+0x18 ;; 0xfffff800
\ 00000038 0A68 LDR R2,[R1, #+0]
\ 0000003A 1043 ORR R0,R2
\ 0000003C 0860 STR R0,[R1, #+0]
\ 0000003E 2088 LDRH R0,[R4, #+0]
\ 00000040 0121 MOV R1,#+0x1
\ 00000042 0143 ORR R1,R0
\ 00000044 2180 STRH R1,[R4, #+0]
\ 00000046 2888 LDRH R0,[R5, #+0]
\ 00000048 0221 MOV R1,#+0x2
\ 0000004A 0143 ORR R1,R0
\ 0000004C 2980 STRH R1,[R5, #+0]
149
150 /* Start the first task. */
151 vPortStartFirstTask();
\ 0000004E ........ _BLF vPortStartFirstTask,vPortStartFirstTask??rT
152
153 /* Should not get here! */
154 return 0;
\ 00000052 0020 MOV R0,#+0
\ 00000054 30BC POP {R4,R5}
\ 00000056 02BC POP {R1}
\ 00000058 0847 BX R1 ;; return
\ 0000005A C046 NOP
\ ??xPortStartScheduler_0:
\ 0000005C 14E000E0 DC32 0xe000e014
\ 00000060 FEFF0000 DC32 0xfffe
\ 00000064 00E000E0 DC32 0xe000e000
\ 00000068 FDFF0000 DC32 0xfffd
\ 0000006C 70F8FFFF DC32 0xfffff870
\ 00000070 20F8FFFF DC32 0xfffff820
\ 00000074 00F8FFFF DC32 0xfffff800
155 }
156 /*-----------------------------------------------------------*/
157
\ In segment CODE, align 4, keep-with-next
158 void vPortEndScheduler( void )
159 {
160 /* It is unlikely that the ARM port will require this function as there
161 is nothing to return to. */
162 }
\ vPortEndScheduler:
\ 00000000 7047 BX LR ;; return
163 /*-----------------------------------------------------------*/
164
165 /* The cooperative scheduler requires a normal IRQ service routine to
166 simply increment the system tick. */
\ In segment CODE, align 4, keep-with-next
167 __arm __irq void vPortNonPreemptiveTick( void )
168 {
\ vPortNonPreemptiveTick:
\ 00000000 04E04EE2 SUB LR,LR,#+0x4
\ 00000004 0F502DE9 STMDB SP!,{R0-R3,R12,LR} ;; Push
169 /* Increment the tick count - which may wake some tasks but as the
170 preemptive scheduler is not being used any woken task is not given
171 processor time no matter what its priority. */
172 vTaskIncrementTick();
\ 00000008 ........ _BLF vTaskIncrementTick,vTaskIncrementTick??rA
173
174 /* Clear the interrupt in the watchdog and EIC. */
175 WDG->SR = 0x0000;
\ 0000000C ........ LDR R0,??DataTable1 ;; 0xe000e010
\ 00000010 0010A0E3 MOV R1,#+0
\ 00000014 B010C0E1 STRH R1,[R0, #+0]
176 portCLEAR_EIC();
\ 00000018 BF00E0E3 MVN R0,#+0xBF
\ 0000001C 700EC0E3 BIC R0,R0,#+0x700
\ 00000020 0110A0E3 MOV R1,#+0x1
\ 00000024 3C2040E2 SUB R2,R0,#+0x3C
\ 00000028 002092E5 LDR R2,[R2, #+0]
\ 0000002C 1112A0E1 MOV R1,R1, LSL R2
\ 00000030 001080E5 STR R1,[R0, #+0]
177 }
\ 00000034 0F90FDE8 LDMIA SP!,{R0-R3,R12,PC}^ ;; return
178 /*-----------------------------------------------------------*/
179
180 /* This function is called from an asm wrapper, so does not require the __irq
181 keyword. */
\ In segment CODE, align 4, keep-with-next
182 void vPortPreemptiveTick( void )
183 {
\ vPortPreemptiveTick:
\ 00000000 00B5 PUSH {LR}
184 /* Increment the tick counter. */
185 vTaskIncrementTick();
\ 00000002 ........ _BLF vTaskIncrementTick,vTaskIncrementTick??rT
186
187 /* The new tick value might unblock a task. Ensure the highest task that
188 is ready to execute is the task that will execute when the tick ISR
189 exits. */
190 vTaskSwitchContext();
\ 00000006 ........ _BLF vTaskSwitchContext,vTaskSwitchContext??rT
191
192 /* Clear the interrupt in the watchdog and EIC. */
193 WDG->SR = 0x0000;
\ 0000000A .... LDR R0,??DataTable1 ;; 0xe000e010
\ 0000000C 0021 MOV R1,#+0
\ 0000000E 0180 STRH R1,[R0, #+0]
194 portCLEAR_EIC();
\ 00000010 0348 LDR R0,??vPortPreemptiveTick_0 ;; 0xfffff840
\ 00000012 0121 MOV R1,#+0x1
\ 00000014 034A LDR R2,??vPortPreemptiveTick_0+0x4 ;; 0xfffff804
\ 00000016 1268 LDR R2,[R2, #+0]
\ 00000018 9140 LSL R1,R2
\ 0000001A 0160 STR R1,[R0, #+0]
195 }
\ 0000001C 01BC POP {R0}
\ 0000001E 0047 BX R0 ;; return
\ ??vPortPreemptiveTick_0:
\ 00000020 40F8FFFF DC32 0xfffff840
\ 00000024 04F8FFFF DC32 0xfffff804
196 /*-----------------------------------------------------------*/
197
198 static void prvSetupTimerInterrupt( void )
199 {
200 /* Set the watchdog up to generate a periodic tick. */
201 WDG_ECITConfig( DISABLE );
202 WDG_CntOnOffConfig( DISABLE );
203 WDG_PeriodValueConfig( configTICK_RATE_HZ );
204
205 /* Setup the tick interrupt in the EIC. */
206 EIC_IRQChannelPriorityConfig( WDG_IRQChannel, 1 );
207 EIC_IRQChannelConfig( WDG_IRQChannel, ENABLE );
208 EIC_IRQConfig( ENABLE );
209 WDG_ECITConfig( ENABLE );
210
211 /* Start the timer - interrupts are actually disabled at this point so
212 it is safe to do this here. */
213 WDG_CntOnOffConfig( ENABLE );
214 }
215 /*-----------------------------------------------------------*/
216
\ In segment CODE, align 4, keep-with-next
217 __arm __interwork void vPortEnterCritical( void )
218 {
\ vPortEnterCritical:
\ 00000000 04E02DE5 STR LR,[SP, #-4]! ;; Push
219 /* Disable interrupts first! */
220 __disable_interrupt();
\ 00000004 ........ _BLF ??DiI_a,??rA??DiI_a
221
222 /* Now interrupts are disabled ulCriticalNesting can be accessed
223 directly. Increment ulCriticalNesting to keep a count of how many times
224 portENTER_CRITICAL() has been called. */
225 ulCriticalNesting++;
\ 00000008 ........ LDR R0,??DataTable3 ;; ulCriticalNesting
\ 0000000C 001090E5 LDR R1,[R0, #+0]
\ 00000010 011081E2 ADD R1,R1,#+0x1
\ 00000014 001080E5 STR R1,[R0, #+0]
226 }
\ 00000018 ........ LDR LR,[SP], #+0x4 ;; Pop
\ 0000001C 1EFF2FE1 BX LR ;; return
227 /*-----------------------------------------------------------*/
228
\ In segment CODE, align 4, keep-with-next
229 __arm __interwork void vPortExitCritical( void )
230 {
\ vPortExitCritical:
\ 00000000 04E02DE5 STR LR,[SP, #-4]! ;; Push
231 if( ulCriticalNesting > portNO_CRITICAL_NESTING )
\ 00000004 ........ LDR R0,??DataTable3 ;; ulCriticalNesting
\ 00000008 001090E5 LDR R1,[R0, #+0]
\ 0000000C 000051E3 CMP R1,#+0
\ 00000010 0200000A BEQ ??vPortExitCritical_0
232 {
233 /* Decrement the nesting count as we are leaving a critical section. */
234 ulCriticalNesting--;
\ 00000014 011051E2 SUBS R1,R1,#+0x1
\ 00000018 001080E5 STR R1,[R0, #+0]
235
236 /* If the nesting level has reached zero then interrupts should be
237 re-enabled. */
238 if( ulCriticalNesting == portNO_CRITICAL_NESTING )
239 {
240 __enable_interrupt();
\ 0000001C ........ _BLFEQ ??EnI_a,??rA??EnI_a
241 }
242 }
243 }
\ ??vPortExitCritical_0:
\ 00000020 ........ LDR LR,[SP], #+0x4 ;; Pop
\ 00000024 1EFF2FE1 BX LR ;; return
\ In segment CODE, align 4, keep-with-next
\ ??DataTable1:
\ 00000000 10E000E0 DC32 0xe000e010
\ In segment CODE, align 4, keep-with-next
\ ??DataTable3:
\ 00000000 ........ DC32 ulCriticalNesting
\ In segment CODE, align 4, keep-with-next
\ ??DataTable5:
\ 00000000 ........ DC32 vTaskIncrementTick
\ In segment DATA_ID, align 4, align-sorted
\ `?<Initializer for ulCriticalNesting>`:
\ 00000000 0F270000 DC32 9999
244 /*-----------------------------------------------------------*/
245
246
247
248
249
250
Maximum stack usage in bytes:
Function CSTACK
-------- ------
pxPortInitialiseStack 0
vPortEndScheduler 0
vPortEnterCritical 4
vPortExitCritical 4
vPortNonPreemptiveTick 24
vPortPreemptiveTick 4
xPortStartScheduler 12
Segment part sizes:
Function/Label Bytes
-------------- -----
ulCriticalNesting 4
pxPortInitialiseStack 156
xPortStartScheduler 120
vPortEndScheduler 2
vPortNonPreemptiveTick 56
vPortPreemptiveTick 40
vPortEnterCritical 32
vPortExitCritical 40
??DataTable1 4
??DataTable3 4
??DataTable5 4
?<Initializer for ulCriticalNesting>
4
Others 112
558 bytes in segment CODE
4 bytes in segment DATA_I
4 bytes in segment DATA_ID
12 bytes in segment INITTAB
458 bytes of CODE memory (+ 112 bytes shared)
4 bytes of CONST memory
4 bytes of DATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -