📄 death.lst
字号:
Warning[Pa082]: undefined behavior: the order of volatile accesses is
undefined in this statement
\ 00002A 2C41 MOV.W 0x0(SP), R12
\ 00002C 1D410200 MOV.W 0x2(SP), R13
\ 000030 1E410400 MOV.W 0x4(SP), R14
\ 000034 1F410600 MOV.W 0x6(SP), R15
\ 000038 B012.... CALL #?Mul32
\ 00003C 814C0000 MOV.W R12, 0x0(SP)
\ 000040 814D0200 MOV.W R13, 0x2(SP)
152 vTaskDelay( xDelay );
\ 000044 0C48 MOV.W R8, R12
\ 000046 B012.... CALL #vTaskDelay
153
154 if( xTaskToKill != NULL )
\ 00004A 0B93 CMP.W #0x0, R11
\ 00004C E527 JEQ ??vSuicidalTask_0
155 {
156 /* Make sure the other task has a go before we delete it. */
157 vTaskDelay( ( portTickType ) 0 );
\ 00004E 0C43 MOV.W #0x0, R12
\ 000050 B012.... CALL #vTaskDelay
158 /* Kill the other task that was created by vCreateTasks(). */
159 vTaskDelete( xTaskToKill );
\ 000054 0C4B MOV.W R11, R12
\ 000056 B012.... CALL #vTaskDelete
160 /* Kill ourselves. */
161 vTaskDelete( NULL );
\ 00005A 0C43 MOV.W #0x0, R12
\ 00005C B012.... CALL #vTaskDelete
\ 000060 DB3F JMP ??vSuicidalTask_0
162 }
163 }
164 }/*lint !e818 !e550 Function prototype must be as per standard for task functions. */
165 /*-----------------------------------------------------------*/
166
\ In segment CODE, align 2
167 static portTASK_FUNCTION( vCreateTasks, pvParameters )
\ vCreateTasks:
168 {
\ 000000 0A12 PUSH.W R10
\ 000002 0B12 PUSH.W R11
\ 000004 0812 PUSH.W R8
\ 000006 0A4C MOV.W R12, R10
169 const portTickType xDelay = ( portTickType ) 1000 / portTICK_RATE_MS;
\ 000008 3B40E803 MOV.W #0x3e8, R11
170 unsigned portBASE_TYPE uxPriority;
171
172 uxPriority = *( unsigned portBASE_TYPE * ) pvParameters;
\ 00000C 284A MOV.W @R10, R8
173 vPortFree( pvParameters );
\ 00000E 0C4A MOV.W R10, R12
\ 000010 B012.... CALL #vPortFree
174
175 for( ;; )
176 {
177 /* Just loop round, delaying then creating the four suicidal tasks. */
178 vTaskDelay( xDelay );
\ ??vCreateTasks_0:
\ 000014 0C4B MOV.W R11, R12
\ 000016 B012.... CALL #vTaskDelay
179
180 xTaskCreate( vSuicidalTask, "SUICID1", deathSTACK_SIZE, NULL, uxPriority, &xCreatedTask1 );
\ 00001A 3012.... PUSH.W #xCreatedTask1
\ 00001E 0812 PUSH.W R8
\ 000020 0312 PUSH.W #0x0
\ 000022 30125800 PUSH.W #0x58
\ 000026 3E40.... MOV.W #`?<Constant "SUICID1">`, R14
\ 00002A 3C40.... MOV.W #vSuicidalTask, R12
\ 00002E B012.... CALL #xTaskCreate
181 xTaskCreate( vSuicidalTask, "SUICID2", deathSTACK_SIZE, &xCreatedTask1, uxPriority, NULL );
\ 000032 0312 PUSH.W #0x0
\ 000034 0812 PUSH.W R8
\ 000036 3012.... PUSH.W #xCreatedTask1
\ 00003A 30125800 PUSH.W #0x58
\ 00003E 3E40.... MOV.W #`?<Constant "SUICID2">`, R14
\ 000042 3C40.... MOV.W #vSuicidalTask, R12
\ 000046 B012.... CALL #xTaskCreate
182
183 xTaskCreate( vSuicidalTask, "SUICID1", deathSTACK_SIZE, NULL, uxPriority, &xCreatedTask2 );
\ 00004A 3012.... PUSH.W #xCreatedTask2
\ 00004E 0812 PUSH.W R8
\ 000050 0312 PUSH.W #0x0
\ 000052 30125800 PUSH.W #0x58
\ 000056 3E40.... MOV.W #`?<Constant "SUICID1">`, R14
\ 00005A 3C40.... MOV.W #vSuicidalTask, R12
\ 00005E B012.... CALL #xTaskCreate
184 xTaskCreate( vSuicidalTask, "SUICID2", deathSTACK_SIZE, &xCreatedTask2, uxPriority, NULL );
\ 000062 0312 PUSH.W #0x0
\ 000064 0812 PUSH.W R8
\ 000066 3012.... PUSH.W #xCreatedTask2
\ 00006A 30125800 PUSH.W #0x58
\ 00006E 3E40.... MOV.W #`?<Constant "SUICID2">`, R14
\ 000072 3C40.... MOV.W #vSuicidalTask, R12
\ 000076 B012.... CALL #xTaskCreate
185
186 ++usCreationCount;
\ 00007A 9253.... ADD.W #0x1, &usCreationCount
\ 00007E 31502000 ADD.W #0x20, SP
\ 000082 C83F JMP ??vCreateTasks_0
187 }
188 }
189 /*-----------------------------------------------------------*/
190
191 /* This is called to check that the creator task is still running and that there
192 are not any more than four extra tasks. */
\ In segment CODE, align 2
193 portBASE_TYPE xIsCreateTaskStillRunning( void )
\ xIsCreateTaskStillRunning:
194 {
\ 000000 0A12 PUSH.W R10
195 static portSHORT usLastCreationCount = -1;
196 portBASE_TYPE xReturn = pdTRUE;
\ 000002 1A43 MOV.W #0x1, R10
197 static unsigned portBASE_TYPE uxTasksRunningNow;
198
199 if( usLastCreationCount == usCreationCount )
\ 000004 9292........ CMP.W &usCreationCount, &??usLastCreationCount
\ 00000A 0220 JNE ??xIsCreateTaskStillRunning_0
200 {
201 xReturn = pdFALSE;
\ 00000C 0A43 MOV.W #0x0, R10
\ 00000E 033C JMP ??xIsCreateTaskStillRunning_1
202 }
203 else
204 {
205 usLastCreationCount = usCreationCount;
\ ??xIsCreateTaskStillRunning_0:
\ 000010 9242........ MOV.W &usCreationCount, &??usLastCreationCount
206 }
207
208 uxTasksRunningNow = ( unsigned portBASE_TYPE ) uxTaskGetNumberOfTasks();
\ ??xIsCreateTaskStillRunning_1:
\ 000016 B012.... CALL #uxTaskGetNumberOfTasks
\ 00001A 824C.... MOV.W R12, &??uxTasksRunningNow
209
210 if( uxTasksRunningNow < uxTasksRunningAtStart )
\ 00001E 9292........ CMP.W &uxTasksRunningAtStart, &??uxTasksRunningNow
\ 000024 022C JC ??xIsCreateTaskStillRunning_2
211 {
212 xReturn = pdFALSE;
\ 000026 0A43 MOV.W #0x0, R10
\ 000028 083C JMP ??xIsCreateTaskStillRunning_3
213 }
214 else if( ( uxTasksRunningNow - uxTasksRunningAtStart ) > uxMaxNumberOfExtraTasksRunning )
\ ??xIsCreateTaskStillRunning_2:
\ 00002A 1F42.... MOV.W &??uxTasksRunningNow, R15
\ 00002E 1F82.... SUB.W &uxTasksRunningAtStart, R15
\ 000032 829F.... CMP.W R15, &uxMaxNumberOfExtraTasksRunning
\ 000036 012C JC ??xIsCreateTaskStillRunning_3
215 {
216 xReturn = pdFALSE;
\ 000038 0A43 MOV.W #0x0, R10
217 }
218 else
219 {
220 /* Everything is okay. */
221 }
222
223 return xReturn;
\ ??xIsCreateTaskStillRunning_3:
\ 00003A 0C4A MOV.W R10, R12
\ 00003C 3A41 POP.W R10
\ 00003E 3041 RET
224 }
\ In segment DATA16_I, align 2, align-sorted
\ 000000 REQUIRE ?cstart_init_copy
\ ??usLastCreationCount:
\ 000000 DS8 2
\ 000002 REQUIRE `?<Initializer for usLastCreationCount>`
\ In segment DATA16_Z, align 2, align-sorted
\ 000000 REQUIRE ?cstart_init_zero
\ ??uxTasksRunningNow:
\ 000000 DS8 2
\ In segment DATA16_ID, align 2, align-sorted
\ `?<Initializer for usLastCreationCount>`:
\ 000000 FFFF DC16 -1
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "CREATOR">`:
\ 000000 43524541544F DC8 "CREATOR"
\ 5200
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "SUICID1">`:
\ 000000 535549434944 DC8 "SUICID1"
\ 3100
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "SUICID2">`:
\ 000000 535549434944 DC8 "SUICID2"
\ 3200
225
226
Maximum stack usage in bytes:
Function CSTACK
-------- ------
vCreateSuicidalTasks 14
-> pvPortMalloc 6
-> xTaskCreate 14
-> uxTaskGetNumberOfTasks 14
vCreateTasks 40
-> vPortFree 8
-> vTaskDelay 8
-> xTaskCreate 16
-> xTaskCreate 24
-> xTaskCreate 32
-> xTaskCreate 40
vSuicidalTask 16
-> vTaskDelay 16
-> vTaskDelay 16
-> vTaskDelete 16
-> vTaskDelete 16
xIsCreateTaskStillRunning 4
-> uxTaskGetNumberOfTasks 4
Segment part sizes:
Function/Label Bytes
-------------- -----
usCreationCount 2
uxTasksRunningAtStart 2
uxMaxNumberOfExtraTasksRunning 2
xCreatedTask1 2
xCreatedTask2 2
vCreateSuicidalTasks 60
vSuicidalTask 98
vCreateTasks 132
xIsCreateTaskStillRunning 64
usLastCreationCount 2
uxTasksRunningNow 2
?<Initializer for usLastCreationCount>
2
?<Constant "CREATOR"> 8
?<Constant "SUICID1"> 8
?<Constant "SUICID2"> 8
354 bytes in segment CODE
26 bytes in segment DATA16_C
2 bytes in segment DATA16_I
2 bytes in segment DATA16_ID
10 bytes in segment DATA16_Z
354 bytes of CODE memory
28 bytes of CONST memory
12 bytes of DATA memory
Errors: none
Warnings: 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -