📄 semtest.lst
字号:
194 {
195 sError = pdTRUE;
\ ??prvSemaphoreTest_9:
\ 0000A0 1743 MOV.W #0x1, R7
196 }
197 }
\ ??prvSemaphoreTest_10:
\ 0000A2 1A53 ADD.W #0x1, R10
\ 0000A4 0B63 ADDC.W #0x0, R11
\ 0000A6 EB3F JMP ??prvSemaphoreTest_0
198
199 /* Release the semaphore, and if no errors have occurred increment the check
200 variable. */
201 if( xSemaphoreGive( pxParameters->xSemaphore ) == pdFALSE )
\ ??prvSemaphoreTest_7:
\ 0000A8 0312 PUSH.W #0x0
\ 0000AA 0E43 MOV.W #0x0, R14
\ 0000AC 2C49 MOV.W @R9, R12
\ 0000AE B012.... CALL #xQueueSend
\ 0000B2 2153 ADD.W #0x2, SP
\ 0000B4 0C93 CMP.W #0x0, R12
\ 0000B6 0120 JNE ??prvSemaphoreTest_11
202 {
203 sError = pdTRUE;
\ 0000B8 1743 MOV.W #0x1, R7
204 }
205
206 if( sError == pdFALSE )
\ ??prvSemaphoreTest_11:
\ 0000BA 0793 CMP.W #0x0, R7
\ 0000BC 0620 JNE ??prvSemaphoreTest_12
207 {
208 if( sCheckVariableToUse < semtstNUM_TASKS )
\ 0000BE 2492 CMP.W #0x4, R4
\ 0000C0 0434 JGE ??prvSemaphoreTest_12
209 {
210 ( sCheckVariables[ sCheckVariableToUse ] )++;
\ 0000C2 0F44 MOV.W R4, R15
\ 0000C4 0F5F RLA.W R15
\ 0000C6 9F53.... ADD.W #0x1, sCheckVariables(R15)
211 }
212 }
213
214 /* If we have a block time then we are running at a priority higher
215 than the idle priority. This task takes a long time to complete
216 a cycle (deliberately so to test the guarding) so will be starving
217 out lower priority tasks. Block for some time to allow give lower
218 priority tasks some processor time. */
219 vTaskDelay( pxParameters->xBlockTime * semtstDELAY_FACTOR );
\ ??prvSemaphoreTest_12:
\ 0000CA 1C490400 MOV.W 0x4(R9), R12
\ 0000CE 0C5C RLA.W R12
\ 0000D0 0F4C MOV.W R12, R15
\ 0000D2 0C5C RLA.W R12
\ 0000D4 0C5C RLA.W R12
\ 0000D6 0C5F ADD.W R15, R12
\ 0000D8 B012.... CALL #vTaskDelay
\ 0000DC BD3F JMP ??prvSemaphoreTest_1
220 }
221 else
222 {
223 if( pxParameters->xBlockTime == ( portTickType ) 0 )
\ ??prvSemaphoreTest_4:
\ 0000DE 89930400 CMP.W #0x0, 0x4(R9)
\ 0000E2 BA23 JNE ??prvSemaphoreTest_1
224 {
225 /* We have not got the semaphore yet, so no point using the
226 processor. We are not blocking when attempting to obtain the
227 semaphore. */
228 taskYIELD();
\ 0000E4 B012.... CALL #vPortYield
\ 0000E8 B73F JMP ??prvSemaphoreTest_1
229 }
230 }
231 }
232 }
233 /*-----------------------------------------------------------*/
234
235 /* This is called to check that all the created tasks are still running. */
\ In segment CODE, align 2
236 portBASE_TYPE xAreSemaphoreTasksStillRunning( void )
\ xAreSemaphoreTasksStillRunning:
237 {
\ 000000 0A12 PUSH.W R10
238 static portSHORT sLastCheckVariables[ semtstNUM_TASKS ] = { 0 };
239 portBASE_TYPE xTask, xReturn = pdTRUE;
\ 000002 1C43 MOV.W #0x1, R12
240
241 for( xTask = 0; xTask < semtstNUM_TASKS; xTask++ )
\ 000004 0E43 MOV.W #0x0, R14
\ ??xAreSemaphoreTasksStillRunning_0:
\ 000006 2E92 CMP.W #0x4, R14
\ 000008 1234 JGE ??xAreSemaphoreTasksStillRunning_1
242 {
243 if( sLastCheckVariables[ xTask ] == sCheckVariables[ xTask ] )
\ 00000A 0D4E MOV.W R14, R13
\ 00000C 0D5D RLA.W R13
\ 00000E 0F4E MOV.W R14, R15
\ 000010 0F5F RLA.W R15
\ 000012 9D9F........ CMP.W sCheckVariables(R15), ??sLastCheckVariables(R13)
\ 000018 0120 JNE ??xAreSemaphoreTasksStillRunning_2
244 {
245 xReturn = pdFALSE;
\ 00001A 0C43 MOV.W #0x0, R12
246 }
247
248 sLastCheckVariables[ xTask ] = sCheckVariables[ xTask ];
\ ??xAreSemaphoreTasksStillRunning_2:
\ 00001C 0D4E MOV.W R14, R13
\ 00001E 0D5D RLA.W R13
\ 000020 0F4E MOV.W R14, R15
\ 000022 0F5F RLA.W R15
\ 000024 9F4D........ MOV.W sCheckVariables(R13), ??sLastCheckVariables(R15)
249 }
\ 00002A 1E53 ADD.W #0x1, R14
\ 00002C EC3F JMP ??xAreSemaphoreTasksStillRunning_0
250
251 return xReturn;
\ ??xAreSemaphoreTasksStillRunning_1:
\ 00002E 3A41 POP.W R10
\ 000030 3041 RET
252 }
\ In segment DATA16_Z, align 2, align-sorted
\ 000000 REQUIRE ?cstart_init_zero
\ ??sLastCheckVariables:
\ 000000 DS8 8
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "PolSEM1">`:
\ 000000 506F6C53454D DC8 "PolSEM1"
\ 3100
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "PolSEM2">`:
\ 000000 506F6C53454D DC8 "PolSEM2"
\ 3200
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "BlkSEM1">`:
\ 000000 426C6B53454D DC8 "BlkSEM1"
\ 3100
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "BlkSEM2">`:
\ 000000 426C6B53454D DC8 "BlkSEM2"
\ 3200
253
254
Maximum stack usage in bytes:
Function CSTACK
-------- ------
prvSemaphoreTest 22
-> xQueueReceive 22
-> xQueueSend 22
-> vTaskDelay 20
-> vPortYield 20
vStartSemaphoreTasks 26
-> pvPortMalloc 10
-> xQueueCreate 10
-> xQueueSend 12
-> pvPortMalloc 10
-> xTaskCreate 18
-> xTaskCreate 26
-> pvPortMalloc 10
-> xQueueCreate 10
-> xQueueSend 12
-> pvPortMalloc 10
-> xTaskCreate 18
-> xTaskCreate 26
xAreSemaphoreTasksStillRunning 4
Segment part sizes:
Function/Label Bytes
-------------- -----
sCheckVariables 8
sNextCheckVariable 2
vStartSemaphoreTasks 278
prvSemaphoreTest 234
xAreSemaphoreTasksStillRunning 50
sLastCheckVariables 8
?<Constant "PolSEM1"> 8
?<Constant "PolSEM2"> 8
?<Constant "BlkSEM1"> 8
?<Constant "BlkSEM2"> 8
562 bytes in segment CODE
32 bytes in segment DATA16_C
18 bytes in segment DATA16_Z
562 bytes of CODE memory
32 bytes of CONST memory
18 bytes of DATA memory
Errors: none
Warnings: 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -