📄 test.lst
字号:
147 **************************************************************************************************************
148 * TASKS
149 **************************************************************************************************************
150 */
151 void Task (void *data)
152 {
\ 000001C0 ........ CALL ?PROLOGUE4_L09
\ 000001C4 9721 SBIW R28,LOW(1)
\ 000001C6 2FA0 MOV R26,R16
\ 000001C8 2FB1 MOV R27,R17
\ ?0033:
153 INT8U x;
154 INT8U y;
155 INT8U err;
156
157 for (;;) {
158 OSSemPend(RandomSem, 0, &err); /* Acquire semaphore to perform random numbers */
\ 000001CA DF5B RCALL ?0072
\ 000001CC 9100.... LDS R16,LWRD(RandomSem)
\ 000001D0 9110.... LDS R17,LWRD((RandomSem+1))
\ 000001D4 ........ CALL OSSemPend
159 x = random(80); /* Find X position where task number will appear */
\ 000001D8 E500 LDI R16,80
\ 000001DA D0F1 RCALL random
\ 000001DC 2F90 MOV R25,R16
160 y = random(16); /* Find Y position where task number will appear */
\ 000001DE E100 LDI R16,16
\ 000001E0 D0EE RCALL random
\ 000001E2 2F80 MOV R24,R16
161 OSSemPost(RandomSem); /* Release semaphore */
\ 000001E4 9100.... LDS R16,LWRD(RandomSem)
\ 000001E8 9110.... LDS R17,LWRD((RandomSem+1))
\ 000001EC ........ CALL OSSemPost
162 /* Display the task number on the screen */
163 VT102DispChar(x + 1, y + 5, *(char *)data, COLOR_WHITE, COLOR_BLACK);
\ 000001F0 DF37 RCALL ?0064
\ 000001F2 2FEA MOV R30,R26
\ 000001F4 2FFB MOV R31,R27
\ 000001F6 8100 LD R16,Z
\ 000001F8 930A ST -Y,R16
\ 000001FA 5F8B SUBI R24,LOW(251)
\ 000001FC 2F48 MOV R20,R24
\ 000001FE 9593 INC R25
\ 00000200 2F09 MOV R16,R25
\ 00000202 D14F RCALL VT102DispChar
164 OSTimeDly(10); /* Delay 10 clock ticks */
\ 00000204 E00A LDI R16,LOW(10)
\ 00000206 E010 LDI R17,0
\ 00000208 ........ CALL OSTimeDly
165 }
166 }
\ 0000020C CFDE RJMP ?0033
\ ; data R26-R27
\ ; y R24
\ ; x R25
\ UART_TX_interrupt:
167
168 /*
169 **************************************************************************************************************
170 * SUPPORT ROUTINES
171 **************************************************************************************************************
172 */
173
174 interrupt [UART_TX_vect] void UART_TX_interrupt (void)
175 {
\ 0000020E 920A ST -Y,R0
\ 00000210 921A ST -Y,R1
\ 00000212 922A ST -Y,R2
\ 00000214 923A ST -Y,R3
\ 00000216 930A ST -Y,R16
\ 00000218 931A ST -Y,R17
\ 0000021A 932A ST -Y,R18
\ 0000021C 933A ST -Y,R19
\ 0000021E 934A ST -Y,R20
\ 00000220 935A ST -Y,R21
\ 00000222 936A ST -Y,R22
\ 00000224 937A ST -Y,R23
\ 00000226 93EA ST -Y,R30
\ 00000228 93FA ST -Y,R31
\ 0000022A B60F IN R0,LOW(63)
\ 0000022C 920A ST -Y,R0
\ 0000022E B60B IN R0,LOW(59)
\ 00000230 920A ST -Y,R0
176 UartTxCount--; /* Decrement number of characters left to send */
\ 00000232 9100.... LDS R16,LWRD(UartTxCount)
\ 00000236 950A DEC R16
\ 00000238 9300.... STS LWRD(UartTxCount),R16
177 if (UartTxCount) {
\ 0000023C F099 BREQ ?0035
178 UDR = UartTxBuf[UartTxRdPtr]; /* Place next character into UART transmit register */
\ 0000023E 91E0.... LDS R30,LWRD(UartTxRdPtr)
\ 00000242 E0F0 LDI R31,LOW(0)
\ 00000244 .... SUBI R30,LOW(-(UartTxBuf))
\ 00000246 .... SBCI R31,HIGH(-(UartTxBuf))
\ 00000248 8100 LD R16,Z
\ 0000024A B90C OUT LOW(12),R16
179 UartTxRdPtr++; /* Advance to next character */
\ 0000024C 9100.... LDS R16,LWRD(UartTxRdPtr)
\ 00000250 9503 INC R16
\ 00000252 9300.... STS LWRD(UartTxRdPtr),R16
180 OSSemPost(UartTxSem); /* Signal that we have room for one more character */
\ 00000256 9100.... LDS R16,LWRD(UartTxSem)
\ 0000025A 9110.... LDS R17,LWRD((UartTxSem+1))
\ 0000025E ........ CALL OSSemPost
181 } else {
\ 00000262 C001 RJMP ?0036
\ ?0035:
182 UCR &= ~0x40; /* Disable UART transmit complete interrupt */
\ 00000264 9856 CBI LOW(10),LOW(6)
\ ?0036:
183 }
184 }
\ 00000266 9009 LD R0,Y+
\ 00000268 BE0B OUT LOW(59),R0
\ 0000026A 9009 LD R0,Y+
\ 0000026C BE0F OUT LOW(63),R0
\ 0000026E 91F9 LD R31,Y+
\ 00000270 91E9 LD R30,Y+
\ 00000272 9179 LD R23,Y+
\ 00000274 9169 LD R22,Y+
\ 00000276 9159 LD R21,Y+
\ 00000278 9149 LD R20,Y+
\ 0000027A 9139 LD R19,Y+
\ 0000027C 9129 LD R18,Y+
\ 0000027E 9119 LD R17,Y+
\ 00000280 9109 LD R16,Y+
\ 00000282 9039 LD R3,Y+
\ 00000284 9029 LD R2,Y+
\ 00000286 9019 LD R1,Y+
\ 00000288 9009 LD R0,Y+
\ 0000028A 9518 RETI
\ AvrInit:
185
186 void AvrInit (void)
187 {
188 TCCR0 = 0x07; /* Set TIMER0 prescaler to CLK/1024 */
\ 0000028C E007 LDI R16,7
\ 0000028E BF03 OUT LOW(51),R16
189 TIMSK = 0x01; /* Enable TIMER0 overflow interrupt */
\ 00000290 E001 LDI R16,1
\ 00000292 BF07 OUT LOW(55),R16
190 UBRR = 12; /* 19200 BAUD at 4.0MHz */
\ 00000294 E00C LDI R16,12
\ 00000296 B909 OUT LOW(9),R16
191 MCUCR |= 0x80; /* Enable external RAM */
\ 00000298 B705 IN R16,LOW(53)
\ 0000029A 6800 ORI R16,LOW(128)
\ 0000029C BF05 OUT LOW(53),R16
192 UCR = 0x08; /* Enable UART transmitter */
\ 0000029E E008 LDI R16,8
\ 000002A0 B90A OUT LOW(10),R16
193 USR |= 0x40; /* Clear UART transmit complete bit (TXC) */
\ 000002A2 9A5E SBI LOW(11),LOW(6)
194 UartTxCount = 0; /* Clear number of characters to send */
\ 000002A4 E000 LDI R16,LOW(0)
\ 000002A6 9300.... STS LWRD(UartTxCount),R16
195 UartTxRdPtr = 0; /* Initialize transmit buffer read pointer */
\ 000002AA 9300.... STS LWRD(UartTxRdPtr),R16
196 UartTxWrPtr = 0; /* Initialize transmit buffer write pointer */
\ 000002AE 9300.... STS LWRD(UartTxWrPtr),R16
197 }
\ 000002B2 9508 RET
\ PutChar:
198
199
200 void PutChar (char c)
201 {
\ 000002B4 938A ST -Y,R24
\ 000002B6 9721 SBIW R28,LOW(1)
\ 000002B8 2F80 MOV R24,R16
202 INT8U err;
203
204 if (UartTxCount) {
\ 000002BA 9100.... LDS R16,LWRD(UartTxCount)
\ 000002BE 2300 TST R16
\ 000002C0 F039 BREQ ?0038
205 OSSemPend(UartTxSem, 0, &err); /* Wait for space in transmit buffer */
\ 000002C2 DEDF RCALL ?0072
\ 000002C4 9100.... LDS R16,LWRD(UartTxSem)
\ 000002C8 9110.... LDS R17,LWRD((UartTxSem+1))
\ 000002CC ........ CALL OSSemPend
\ ?0038:
206 }
207 OS_ENTER_CRITICAL();
\ 000002D0 930A DW LWRD(37642)
\ 000002D2 B70F DW LWRD(46863)
\ 000002D4 94F8 CLI
\ 000002D6 930F DW LWRD(37647)
\ 000002D8 9109 DW LWRD(37129)
208 if (UartTxCount) {
\ 000002DA 9100.... LDS R16,LWRD(UartTxCount)
\ 000002DE 2300 TST R16
\ 000002E0 F089 BREQ ?0040
209 UartTxBuf[UartTxWrPtr] = c; /* Put character to send in transmit buffer */
\ 000002E2 91E0.... LDS R30,LWRD(UartTxWrPtr)
\ 000002E6 E0F0 LDI R31,LOW(0)
\ 000002E8 .... SUBI R30,LOW(-(UartTxBuf))
\ 000002EA .... SBCI R31,HIGH(-(UartTxBuf))
\ 000002EC 8380 ST Z,R24
210 UartTxWrPtr++; /* Prepare for next character */
\ 000002EE 9100.... LDS R16,LWRD(UartTxWrPtr)
\ 000002F2 9503 INC R16
\ 000002F4 9300.... STS LWRD(UartTxWrPtr),R16
211 UartTxCount++; /* Increment number of characters to send */
\ 000002F8 9100.... LDS R16,LWRD(UartTxCount)
\ 000002FC 9503 INC R16
\ 000002FE 9300.... STS LWRD(UartTxCount),R16
212 } else {
\ 00000302 C005 RJMP ?0041
\ ?0040:
213 UDR = c; /* Write first char directly to the UART */
\ 00000304 B98C OUT LOW(12),R24
214 UartTxCount = 1;
\ 00000306 E001 LDI R16,1
\ 00000308 9300.... STS LWRD(UartTxCount),R16
215 UCR |= 0x40; /* Enable UART transmit complete interrupt */
\ 0000030C 9A56 SBI LOW(10),LOW(6)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -