📄 main.lst
字号:
\ 00000052 01B4 PUSH {R0}
\ 00000054 0023 MOV R3,#+0
\ 00000056 6422 MOV R2,#+0x64
\ 00000058 0649 LDR R1,??main_0+0x8 ;; `?<Constant "Check">`
\ 0000005A 0748 LDR R0,??main_0+0xC ;; ??vErrorChecks
\ 0000005C ........ _BLF xTaskCreate,xTaskCreate??rT
139
140 /* Start the scheduler.
141
142 NOTE : Tasks run in system mode and the scheduler runs in Supervisor mode.
143 The processor MUST be in supervisor mode when vTaskStartScheduler is
144 called. The demo applications included in the FreeRTOS.org download switch
145 to supervisor mode prior to main being called. If you are not using one of
146 these demo application projects then ensure Supervisor mode is used here. */
147
148 vTaskStartScheduler();
\ 00000060 ........ _BLF vTaskStartScheduler,vTaskStartScheduler??rT
149
150 /* We should never get here as control is now taken by the scheduler. */
151 return;
\ 00000064 02B0 ADD SP,#+0x8
\ 00000066 01BC POP {R0}
\ 00000068 0047 BX R0 ;; return
\ 0000006A C046 NOP
\ ??main_0:
\ 0000006C 080000A0 DC32 0xa0000008
\ 00000070 FF7FFFFF DC32 0xffff7fff
\ 00000074 ........ DC32 `?<Constant "Check">`
\ 00000078 ........ DC32 ??vErrorChecks
152 }
153 /*-----------------------------------------------------------*/
154
155 static void prvSetupHardware( void )
156 {
157 /* Setup the PLL to generate a 48MHz clock from the 4MHz CLK. */
158
159 /* Turn of the div by two. */
160 RCCU_Div2Config( DISABLE );
161
162 /* 48MHz = ( 4MHz * 12 ) / 1 */
163 RCCU_PLL1Config( RCCU_PLL1_Mul_12, RCCU_Div_1 );
164 RCCU_RCLKSourceConfig( RCCU_PLL1_Output );
165 }
166 /*-----------------------------------------------------------*/
167
\ In segment CODE, align 4, keep-with-next
168 static void vErrorChecks( void *pvParameters )
169 {
\ ??vErrorChecks:
\ 00000000 50B5 PUSH {R4,R6,LR}
\ 00000002 81B0 SUB SP,#+0x4
170 portTickType xDelayPeriod = mainNO_ERROR_FLASH_PERIOD;
\ 00000004 164C LDR R4,??vErrorChecks_1 ;; 0xbb8
171 portTickType xLastWakeTime;
172
173 /* The parameters are not used in this task. */
174 ( void ) pvParameters;
175
176 /* Initialise xLastWakeTime to ensure the first call to vTaskDelayUntil()
177 functions correctly. */
178 xLastWakeTime = xTaskGetTickCount();
\ 00000006 ........ _BLF xTaskGetTickCount,xTaskGetTickCount??rT
\ 0000000A 0090 STR R0,[SP, #+0]
179
180 /* Cycle for ever, delaying then checking all the other tasks are still
181 operating without error. If an error is detected then the delay period
182 is decreased from mainNO_ERROR_FLASH_PERIOD to mainERROR_FLASH_PERIOD so
183 the on board LED flash rate will increase. */
184
185 for( ;; )
186 {
187 /* Delay until it is time to execute again. The delay period is
188 shorter following an error so the LED flashes faster. */
189 vTaskDelayUntil( &xLastWakeTime, xDelayPeriod );
\ ??vErrorChecks_2:
\ 0000000C 211C MOV R1,R4
\ 0000000E 6846 MOV R0,SP
\ 00000010 ........ _BLF vTaskDelayUntil,vTaskDelayUntil??rT
190
191 /* Check all the standard demo application tasks are executing without
192 error. */
193 if( prvCheckOtherTasksAreStillRunning() != pdPASS )
\ 00000014 0126 MOV R6,#+0x1
\ 00000016 ........ _BLF xAreIntegerMathsTaskStillRunning,xAreIntegerMathsTaskStillRunning??rT
\ 0000001A 0128 CMP R0,#+0x1
\ 0000001C 00D0 BEQ ??vErrorChecks_3
\ 0000001E 0026 MOV R6,#+0
\ ??vErrorChecks_3:
\ 00000020 ........ _BLF xArePollingQueuesStillRunning,xArePollingQueuesStillRunning??rT
\ 00000024 0128 CMP R0,#+0x1
\ 00000026 00D0 BEQ ??vErrorChecks_4
\ 00000028 0026 MOV R6,#+0
\ ??vErrorChecks_4:
\ 0000002A ........ _BLF xAreSemaphoreTasksStillRunning,xAreSemaphoreTasksStillRunning??rT
\ 0000002E 0128 CMP R0,#+0x1
\ 00000030 00D0 BEQ ??vErrorChecks_5
\ 00000032 0026 MOV R6,#+0
\ ??vErrorChecks_5:
\ 00000034 ........ _BLF xAreBlockingQueuesStillRunning,xAreBlockingQueuesStillRunning??rT
\ 00000038 0128 CMP R0,#+0x1
\ 0000003A 00D0 BEQ ??vErrorChecks_6
\ 0000003C 0026 MOV R6,#+0
\ ??vErrorChecks_6:
\ 0000003E ........ _BLF xAreComTestTasksStillRunning,xAreComTestTasksStillRunning??rT
\ 00000042 0128 CMP R0,#+0x1
\ 00000044 00D0 BEQ ??vErrorChecks_7
\ 00000046 0026 MOV R6,#+0
\ ??vErrorChecks_7:
\ 00000048 ........ _BLF xAreDynamicPriorityTasksStillRunning,xAreDynamicPriorityTasksStillRunning??rT
\ 0000004C 0128 CMP R0,#+0x1
\ 0000004E 01D1 BNE ??vErrorChecks_8
\ 00000050 012E CMP R6,#+0x1
\ 00000052 01D0 BEQ ??vErrorChecks_9
194 {
195 /* An error has been detected in one of the tasks - flash faster. */
196 xDelayPeriod = mainERROR_FLASH_PERIOD;
\ ??vErrorChecks_8:
\ 00000054 FA24 MOV R4,#+0xFA
\ 00000056 6400 LSL R4,R4,#+0x1 ;; #+0x1F4
197 }
198
199 vParTestToggleLED( mainCHECK_TASK_LED );
\ ??vErrorChecks_9:
\ 00000058 0420 MOV R0,#+0x4
\ 0000005A ........ _BLF vParTestToggleLED,vParTestToggleLED??rT
\ 0000005E D5E7 B ??vErrorChecks_2
\ ??vErrorChecks_1:
\ 00000060 B80B0000 DC32 0xbb8
200 }
201 }
\ In segment DATA_C, align 4, align-sorted
\ `?<Constant "Check">`:
\ 00000000 436865636B00 DC8 "Check"
\ 00000006 0000 DC8 0, 0
202 /*-----------------------------------------------------------*/
203
204 static portLONG prvCheckOtherTasksAreStillRunning( void )
205 {
206 portLONG lReturn = ( portLONG ) pdPASS;
207
208 /* Check all the demo tasks (other than the flash tasks) to ensure
209 that they are all still running, and that none of them have detected
210 an error. */
211
212 if( xAreIntegerMathsTaskStillRunning() != pdTRUE )
213 {
214 lReturn = ( portLONG ) pdFAIL;
215 }
216
217 if( xArePollingQueuesStillRunning() != pdTRUE )
218 {
219 lReturn = ( portLONG ) pdFAIL;
220 }
221
222 if( xAreSemaphoreTasksStillRunning() != pdTRUE )
223 {
224 lReturn = ( portLONG ) pdFAIL;
225 }
226
227 if( xAreBlockingQueuesStillRunning() != pdTRUE )
228 {
229 lReturn = ( portLONG ) pdFAIL;
230 }
231
232 if( xAreComTestTasksStillRunning() != pdTRUE )
233 {
234 lReturn = ( portLONG ) pdFAIL;
235 }
236
237 if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
238 {
239 lReturn = ( portLONG ) pdFAIL;
240 }
241
242 return lReturn;
243 }
244 /*-----------------------------------------------------------*/
245
246
Maximum stack usage in bytes:
Function CSTACK
-------- ------
main 12
vErrorChecks 24
Segment part sizes:
Function/Label Bytes
-------------- -----
main 124
vErrorChecks 100
?<Constant "Check"> 8
Others 192
416 bytes in segment CODE
8 bytes in segment DATA_C
224 bytes of CODE memory (+ 192 bytes shared)
8 bytes of CONST memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -