📄 pollq.lst
字号:
\ 000030 0F20 JNE ??vPolledQueueProducer_5
124 {
125 /* If an error has ever been recorded we stop incrementing the
126 check variable. */
127 portENTER_CRITICAL();
\ 000032 32C2 DINT
\ 000034 0343 NOP
\ 000036 9253.... ADD.W #0x1, &usCriticalNesting
128 xPollingProducerCount++;
\ 00003A 9253.... ADD.W #0x1, &xPollingProducerCount
129 portEXIT_CRITICAL();
\ 00003E 8293.... CMP.W #0x0, &usCriticalNesting
\ 000042 0624 JEQ ??vPolledQueueProducer_5
\ 000044 B253.... ADD.W #0xffff, &usCriticalNesting
\ 000048 8293.... CMP.W #0x0, &usCriticalNesting
\ 00004C 0120 JNE ??vPolledQueueProducer_5
\ 00004E 32D2 EINT
130 }
131
132 /* Update the value we are going to post next time around. */
133 usValue++;
\ ??vPolledQueueProducer_5:
\ 000050 91530000 ADD.W #0x1, 0x0(SP)
134 }
135 }
\ ??vPolledQueueProducer_4:
\ 000054 1853 ADD.W #0x1, R8
\ 000056 DD3F JMP ??vPolledQueueProducer_0
136
137 /* Wait before we start posting again to ensure the consumer runs and
138 empties the queue. */
139 vTaskDelay( pollqDELAY );
\ ??vPolledQueueProducer_2:
\ 000058 3C40C800 MOV.W #0xc8, R12
\ 00005C B012.... CALL #vTaskDelay
\ 000060 D73F JMP ??vPolledQueueProducer_1
140 }
141 } /*lint !e818 Function prototype must conform to API. */
142 /*-----------------------------------------------------------*/
143
\ In segment CODE, align 2
144 static portTASK_FUNCTION( vPolledQueueConsumer, pvParameters )
\ vPolledQueueConsumer:
145 {
\ 000000 0A12 PUSH.W R10
\ 000002 0B12 PUSH.W R11
\ 000004 0812 PUSH.W R8
\ 000006 2183 SUB.W #0x2, SP
\ 000008 0A4C MOV.W R12, R10
146 unsigned portSHORT usData, usExpectedValue = ( unsigned portSHORT ) 0;
\ 00000A 0B43 MOV.W #0x0, R11
147 signed portBASE_TYPE xError = pdFALSE;
\ 00000C 0843 MOV.W #0x0, R8
148
149 for( ;; )
150 {
151 /* Loop until the queue is empty. */
152 while( uxQueueMessagesWaiting( *( ( xQueueHandle * ) pvParameters ) ) )
\ ??vPolledQueueConsumer_0:
\ 00000E 2C4A MOV.W @R10, R12
\ 000010 B012.... CALL #uxQueueMessagesWaiting
\ 000014 0C93 CMP.W #0x0, R12
\ 000016 2224 JEQ ??vPolledQueueConsumer_1
153 {
154 if( xQueueReceive( *( ( xQueueHandle * ) pvParameters ), &usData, pollqNO_DELAY ) == pdPASS )
\ 000018 0312 PUSH.W #0x0
\ 00001A 0E41 MOV.W SP, R14
\ 00001C 2E53 ADD.W #0x2, R14
\ 00001E 2C4A MOV.W @R10, R12
\ 000020 B012.... CALL #xQueueReceive
\ 000024 2153 ADD.W #0x2, SP
\ 000026 1C93 CMP.W #0x1, R12
\ 000028 F223 JNE ??vPolledQueueConsumer_0
155 {
156 if( usData != usExpectedValue )
\ 00002A 819B0000 CMP.W R11, 0x0(SP)
\ 00002E 0324 JEQ ??vPolledQueueConsumer_2
157 {
158 /* This is not what we expected to receive so an error has
159 occurred. */
160 xError = pdTRUE;
\ 000030 1843 MOV.W #0x1, R8
161
162 /* Catch-up to the value we received so our next expected
163 value should again be correct. */
164 usExpectedValue = usData;
\ 000032 2B41 MOV.W 0x0(SP), R11
\ 000034 113C JMP ??vPolledQueueConsumer_3
165 }
166 else
167 {
168 if( xError == pdFALSE )
\ ??vPolledQueueConsumer_2:
\ 000036 0893 CMP.W #0x0, R8
\ 000038 0F20 JNE ??vPolledQueueConsumer_3
169 {
170 /* Only increment the check variable if no errors have
171 occurred. */
172 portENTER_CRITICAL();
\ 00003A 32C2 DINT
\ 00003C 0343 NOP
\ 00003E 9253.... ADD.W #0x1, &usCriticalNesting
173 xPollingConsumerCount++;
\ 000042 9253.... ADD.W #0x1, &xPollingConsumerCount
174 portEXIT_CRITICAL();
\ 000046 8293.... CMP.W #0x0, &usCriticalNesting
\ 00004A 0624 JEQ ??vPolledQueueConsumer_3
\ 00004C B253.... ADD.W #0xffff, &usCriticalNesting
\ 000050 8293.... CMP.W #0x0, &usCriticalNesting
\ 000054 0120 JNE ??vPolledQueueConsumer_3
\ 000056 32D2 EINT
175 }
176 }
177
178 /* Next time round we would expect the number to be one higher. */
179 usExpectedValue++;
\ ??vPolledQueueConsumer_3:
\ 000058 1B53 ADD.W #0x1, R11
\ 00005A D93F JMP ??vPolledQueueConsumer_0
180 }
181 }
182
183 /* Now the queue is empty we block, allowing the producer to place more
184 items in the queue. */
185 vTaskDelay( pollqDELAY );
\ ??vPolledQueueConsumer_1:
\ 00005C 3C40C800 MOV.W #0xc8, R12
\ 000060 B012.... CALL #vTaskDelay
\ 000064 D43F JMP ??vPolledQueueConsumer_0
186 }
187 } /*lint !e818 Function prototype must conform to API. */
188 /*-----------------------------------------------------------*/
189
190 /* This is called to check that all the created tasks are still running with no errors. */
\ In segment CODE, align 2
191 portBASE_TYPE xArePollingQueuesStillRunning( void )
\ xArePollingQueuesStillRunning:
192 {
193 portBASE_TYPE xReturn;
194
195 /* Check both the consumer and producer poll count to check they have both
196 been changed since out last trip round. We do not need a critical section
197 around the check variables as this is called from a higher priority than
198 the other tasks that access the same variables. */
199 if( ( xPollingConsumerCount == pollqINITIAL_VALUE ) ||
200 ( xPollingProducerCount == pollqINITIAL_VALUE )
201 )
\ 000000 8293.... CMP.W #0x0, &xPollingConsumerCount
\ 000004 0324 JEQ ??xArePollingQueuesStillRunning_0
\ 000006 8293.... CMP.W #0x0, &xPollingProducerCount
\ 00000A 0220 JNE ??xArePollingQueuesStillRunning_1
202 {
203 xReturn = pdFALSE;
\ ??xArePollingQueuesStillRunning_0:
\ 00000C 0C43 MOV.W #0x0, R12
\ 00000E 013C JMP ??xArePollingQueuesStillRunning_2
204 }
205 else
206 {
207 xReturn = pdTRUE;
\ ??xArePollingQueuesStillRunning_1:
\ 000010 1C43 MOV.W #0x1, R12
208 }
209
210 /* Set the check variables back down so we know if they have been
211 incremented the next time around. */
212 xPollingConsumerCount = pollqINITIAL_VALUE;
\ ??xArePollingQueuesStillRunning_2:
\ 000012 8243.... MOV.W #0x0, &xPollingConsumerCount
213 xPollingProducerCount = pollqINITIAL_VALUE;
\ 000016 8243.... MOV.W #0x0, &xPollingProducerCount
214
215 return xReturn;
\ 00001A 3041 RET
216 }
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "QConsNB">`:
\ 000000 51436F6E734E DC8 "QConsNB"
\ 4200
\ In segment DATA16_C, align 1, align-sorted
\ `?<Constant "QProdNB">`:
\ 000000 5150726F644E DC8 "QProdNB"
\ 4200
Maximum stack usage in bytes:
Function CSTACK
-------- ------
vPolledQueueConsumer 12
-> uxQueueMessagesWaiting 10
-> xQueueReceive 12
-> vTaskDelay 10
vPolledQueueProducer 12
-> xQueueSend 12
-> vTaskDelay 10
vStartPolledQueueTasks 20
-> xQueueCreate 4
-> xTaskCreate 12
-> xTaskCreate 20
xArePollingQueuesStillRunning 2
Segment part sizes:
Function/Label Bytes
-------------- -----
xPollingConsumerCount 2
xPollingProducerCount 2
vStartPolledQueueTasks 74
xPolledQueue 2
vPolledQueueProducer 98
vPolledQueueConsumer 102
xArePollingQueuesStillRunning 28
?<Constant "QConsNB"> 8
?<Constant "QProdNB"> 8
302 bytes in segment CODE
16 bytes in segment DATA16_C
6 bytes in segment DATA16_Z
302 bytes of CODE memory
16 bytes of CONST memory
6 bytes of DATA memory
Errors: none
Warnings: 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -