📄 blockq.lst
字号:
223 if( usData != usExpectedValue )
224 {
225 /* Catch-up. */
226 usExpectedValue = usData;
\ ??vBlockingQueueConsumer_2:
\ 0000000C 6846 MOV R0,SP
\ 0000000E 0588 LDRH R5,[R0, #+0]
227
228 sErrorEverOccurred = pdTRUE;
\ 00000010 0126 MOV R6,#+0x1
229 }
\ ??vBlockingQueueConsumer_1:
\ 00000012 6268 LDR R2,[R4, #+0x4]
\ 00000014 6946 MOV R1,SP
\ 00000016 2068 LDR R0,[R4, #+0]
\ 00000018 ........ _BLF xQueueReceive,xQueueReceive??rT
\ 0000001C 0128 CMP R0,#+0x1
\ 0000001E F8D1 BNE ??vBlockingQueueConsumer_1
\ 00000020 6846 MOV R0,SP
\ 00000022 0088 LDRH R0,[R0, #+0]
\ 00000024 2D04 LSL R5,R5,#+0x10
\ 00000026 2D0C LSR R5,R5,#+0x10
\ 00000028 A842 CMP R0,R5
\ 0000002A EFD1 BNE ??vBlockingQueueConsumer_2
230 else
231 {
232 /* We have successfully received a message, so increment the
233 variable used to check we are still running. */
234 if( sErrorEverOccurred == pdFALSE )
\ 0000002C 002E CMP R6,#+0
\ 0000002E 04D1 BNE ??vBlockingQueueConsumer_3
235 {
236 ( *pxQueueParameters->psCheckVariable )++;
\ 00000030 A068 LDR R0,[R4, #+0x8]
\ 00000032 0021 MOV R1,#+0
\ 00000034 415E LDRSH R1,[R0, R1]
\ 00000036 491C ADD R1,R1,#+0x1
\ 00000038 0180 STRH R1,[R0, #+0]
237 }
238
239 /* Increment the value we expect to remove from the queue next time
240 round. */
241 ++usExpectedValue;
\ ??vBlockingQueueConsumer_3:
\ 0000003A 6D1C ADD R5,R5,#+0x1
\ 0000003C E9E7 B ??vBlockingQueueConsumer_1
242 }
243 }
244 }
245 }
246 /*-----------------------------------------------------------*/
247
248 /* This is called to check that all the created tasks are still running. */
\ In segment CODE, align 4, keep-with-next
249 portBASE_TYPE xAreBlockingQueuesStillRunning( void )
250 {
\ xAreBlockingQueuesStillRunning:
\ 00000000 F0B4 PUSH {R4-R7}
251 static portSHORT sLastBlockingConsumerCount[ blckqNUM_TASK_SETS ] = { ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0 };
252 static portSHORT sLastBlockingProducerCount[ blckqNUM_TASK_SETS ] = { ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0 };
253 portBASE_TYPE xReturn = pdPASS, xTasks;
\ 00000002 0120 MOV R0,#+0x1
254
255 /* Not too worried about mutual exclusion on these variables as they are 16
256 bits and we are only reading them. We also only care to see if they have
257 changed or not.
258
259 Loop through each check variable to and return pdFALSE if any are found not
260 to have changed since the last call. */
261
262 for( xTasks = 0; xTasks < blckqNUM_TASK_SETS; xTasks++ )
\ 00000004 .... LDR R1,??DataTable2 ;; ??sBlockingConsumerCount
\ 00000006 0F4A LDR R2,??xAreBlockingQueuesStillRunning_0 ;; ??sLastBlockingConsumerCount
\ 00000008 .... LDR R3,??DataTable3 ;; ??sBlockingProducerCount
\ 0000000A 0F4C LDR R4,??xAreBlockingQueuesStillRunning_0+0x4 ;; ??sLastBlockingProducerCount
\ 0000000C 0325 MOV R5,#+0x3
\ ??xAreBlockingQueuesStillRunning_1:
\ 0000000E 0026 MOV R6,#+0
\ 00000010 8E5F LDRSH R6,[R1, R6]
\ 00000012 0027 MOV R7,#+0
\ 00000014 D75F LDRSH R7,[R2, R7]
\ 00000016 BE42 CMP R6,R7
\ 00000018 00D1 BNE ??xAreBlockingQueuesStillRunning_2
263 {
264 if( sBlockingConsumerCount[ xTasks ] == sLastBlockingConsumerCount[ xTasks ] )
265 {
266 xReturn = pdFALSE;
\ 0000001A 0020 MOV R0,#+0
267 }
268 sLastBlockingConsumerCount[ xTasks ] = sBlockingConsumerCount[ xTasks ];
\ ??xAreBlockingQueuesStillRunning_2:
\ 0000001C 0E88 LDRH R6,[R1, #+0]
\ 0000001E 1680 STRH R6,[R2, #+0]
269
270
271 if( sBlockingProducerCount[ xTasks ] == sLastBlockingProducerCount[ xTasks ] )
\ 00000020 0026 MOV R6,#+0
\ 00000022 9E5F LDRSH R6,[R3, R6]
\ 00000024 0027 MOV R7,#+0
\ 00000026 E75F LDRSH R7,[R4, R7]
\ 00000028 BE42 CMP R6,R7
\ 0000002A 00D1 BNE ??xAreBlockingQueuesStillRunning_3
272 {
273 xReturn = pdFALSE;
\ 0000002C 0020 MOV R0,#+0
274 }
275 sLastBlockingProducerCount[ xTasks ] = sBlockingProducerCount[ xTasks ];
\ ??xAreBlockingQueuesStillRunning_3:
\ 0000002E 1E88 LDRH R6,[R3, #+0]
\ 00000030 2680 STRH R6,[R4, #+0]
276 }
\ 00000032 A41C ADD R4,R4,#+0x2
\ 00000034 9B1C ADD R3,R3,#+0x2
\ 00000036 921C ADD R2,R2,#+0x2
\ 00000038 891C ADD R1,R1,#+0x2
\ 0000003A 6D1E SUB R5,R5,#+0x1
\ 0000003C E7D1 BNE ??xAreBlockingQueuesStillRunning_1
277
278 return xReturn;
\ 0000003E F0BC POP {R4-R7}
\ 00000040 00B0 ADD SP,#+0
\ 00000042 7047 BX LR ;; return
\ ??xAreBlockingQueuesStillRunning_0:
\ 00000044 ........ DC32 ??sLastBlockingConsumerCount
\ 00000048 ........ DC32 ??sLastBlockingProducerCount
279 }
\ In segment DATA_Z, align 4, align-sorted
\ ??sLastBlockingConsumerCount:
\ 00000000 DS8 8
\ In segment DATA_Z, align 4, align-sorted
\ ??sLastBlockingProducerCount:
\ 00000000 DS8 8
\ In segment CODE, align 4, keep-with-next
\ ??DataTable2:
\ 00000000 ........ DC32 ??sBlockingConsumerCount
\ In segment CODE, align 4, keep-with-next
\ ??DataTable3:
\ 00000000 ........ DC32 ??sBlockingProducerCount
\ In segment DATA_C, align 4, align-sorted
\ `?<Constant "QConsB1">`:
\ 00000000 51436F6E7342 DC8 "QConsB1"
\ 3100
\ In segment DATA_C, align 4, align-sorted
\ `?<Constant "QProdB2">`:
\ 00000000 5150726F6442 DC8 "QProdB2"
\ 3200
\ In segment DATA_C, align 4, align-sorted
\ `?<Constant "QProdB3">`:
\ 00000000 5150726F6442 DC8 "QProdB3"
\ 3300
\ In segment DATA_C, align 4, align-sorted
\ `?<Constant "QConsB4">`:
\ 00000000 51436F6E7342 DC8 "QConsB4"
\ 3400
\ In segment DATA_C, align 4, align-sorted
\ `?<Constant "QProdB5">`:
\ 00000000 5150726F6442 DC8 "QProdB5"
\ 3500
\ In segment DATA_C, align 4, align-sorted
\ `?<Constant "QConsB6">`:
\ 00000000 51436F6E7342 DC8 "QConsB6"
\ 3600
280
Maximum stack usage in bytes:
Function CSTACK
-------- ------
vBlockingQueueConsumer 20
vBlockingQueueProducer 16
vStartBlockingQueueTasks 64
xAreBlockingQueuesStillRunning 20
Segment part sizes:
Function/Label Bytes
-------------- -----
sBlockingConsumerCount 8
sBlockingProducerCount 8
vStartBlockingQueueTasks 308
vBlockingQueueProducer 58
vBlockingQueueConsumer 62
xAreBlockingQueuesStillRunning 76
sLastBlockingConsumerCount 8
sLastBlockingProducerCount 8
??DataTable2 4
??DataTable3 4
?<Constant "QConsB1"> 8
?<Constant "QProdB2"> 8
?<Constant "QProdB3"> 8
?<Constant "QConsB4"> 8
?<Constant "QProdB5"> 8
?<Constant "QConsB6"> 8
Others 92
592 bytes in segment CODE
48 bytes in segment DATA_C
32 bytes in segment DATA_Z
12 bytes in segment INITTAB
512 bytes of CODE memory (+ 92 bytes shared)
48 bytes of CONST memory
32 bytes of DATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -