📄 test.lst
字号:
132 /*
133 **************************************************************************************************************
134 * TASKS
135 **************************************************************************************************************
136 */
137 void Task (void *data)
138 {
\ 000001A2 .... RCALL ?PROLOGUE4_L09
\ 000001A4 2197 SBIW R28,LOW(1)
\ 000001A6 A02F MOV R26,R16
\ 000001A8 B12F MOV R27,R17
\ ?0035:
139 INT8U x;
140 INT8U y;
141 INT8U err;
142
143 for (;;) {
144 OSSemPend(RandomSem, 0, &err); /* Acquire semaphore to perform random numbers */
\ 000001AA 5FDF RCALL ?0072
\ 000001AC 17D0 RCALL ?0080
\ 000001AE .... RCALL OSSemPend
145 x = random(80); /* Find X position where task number will appear */
\ 000001B0 00E5 LDI R16,80
\ 000001B2 E4D0 RCALL random
\ 000001B4 802F MOV R24,R16
146 y = random(16); /* Find Y position where task number will appear */
\ 000001B6 00E1 LDI R16,16
\ 000001B8 E1D0 RCALL random
\ 000001BA 902F MOV R25,R16
147 OSSemPost(RandomSem); /* Release semaphore */
\ 000001BC 0FD0 RCALL ?0080
\ 000001BE .... RCALL OSSemPost
148 /* Display the task number on the screen */
149 VT102DispChar(x + 1, y + 5, *(char *)data, COLOR_WHITE, COLOR_BLACK);
\ 000001C0 47DF RCALL ?0068
\ 000001C2 EA2F MOV R30,R26
\ 000001C4 FB2F MOV R31,R27
\ 000001C6 0081 LD R16,Z
\ 000001C8 0A93 ST -Y,R16
\ 000001CA 9B5F SUBI R25,LOW(251)
\ 000001CC 492F MOV R20,R25
\ 000001CE 8395 INC R24
\ 000001D0 082F MOV R16,R24
\ 000001D2 37D1 RCALL VT102DispChar
150 OSTimeDly(3); /* Delay 3 clock ticks */
\ 000001D4 03E0 LDI R16,LOW(3)
\ 000001D6 10E0 LDI R17,0
\ 000001D8 .... RCALL OSTimeDly
151 }
152 }
\ 000001DA E7CF RJMP ?0035
\ ?0080:
\ 000001DC 0091.... LDS R16,LWRD(RandomSem)
\ 000001E0 1091.... LDS R17,LWRD((RandomSem+1))
\ 000001E4 0895 RET
\ ; data R26-R27
\ ; y R25
\ ; x R24
\ UART_TX_interrupt:
153
154 /*
155 **************************************************************************************************************
156 * SUPPORT ROUTINES
157 **************************************************************************************************************
158 */
159
160 interrupt [UART_TX_vect] void UART_TX_interrupt (void)
161 {
\ 000001E6 0A92 ST -Y,R0
\ 000001E8 1A92 ST -Y,R1
\ 000001EA 2A92 ST -Y,R2
\ 000001EC 3A92 ST -Y,R3
\ 000001EE 0A93 ST -Y,R16
\ 000001F0 1A93 ST -Y,R17
\ 000001F2 2A93 ST -Y,R18
\ 000001F4 3A93 ST -Y,R19
\ 000001F6 4A93 ST -Y,R20
\ 000001F8 5A93 ST -Y,R21
\ 000001FA 6A93 ST -Y,R22
\ 000001FC 7A93 ST -Y,R23
\ 000001FE EA93 ST -Y,R30
\ 00000200 FA93 ST -Y,R31
\ 00000202 FFB7 IN R31,LOW(63)
\ 00000204 FA93 ST -Y,R31
162 UartTxCount--; /* Decrement number of characters left to send */
\ 00000206 0091.... LDS R16,LWRD(UartTxCount)
\ 0000020A 0150 SUBI R16,LOW(1)
\ 0000020C 0093.... STS LWRD(UartTxCount),R16
163 if (UartTxCount) {
\ 00000210 79F0 BREQ ?0037
164 UDR = UartTxBuf[UartTxRdPtr]; /* Place next character into UART transmit register */
\ 00000212 E091.... LDS R30,LWRD(UartTxRdPtr)
\ 00000216 FF27 CLR R31
\ 00000218 .... SUBI R30,LOW(-(UartTxBuf))
\ 0000021A .... SBCI R31,HIGH(-(UartTxBuf))
\ 0000021C 0081 LD R16,Z
\ 0000021E 0CB9 OUT LOW(12),R16
165 UartTxRdPtr++; /* Advance to next character */
\ 00000220 0091.... LDS R16,LWRD(UartTxRdPtr)
\ 00000224 0395 INC R16
\ 00000226 0093.... STS LWRD(UartTxRdPtr),R16
166 OSSemPost(UartTxSem); /* Signal that we have room for one more character */
\ 0000022A 14D0 RCALL ?0083
\ 0000022C .... RCALL OSSemPost
167 } else {
\ 0000022E 01C0 RJMP ?0038
\ ?0037:
168 UCR &= ~0x40; /* Disable UART transmit complete interrupt */
\ 00000230 5698 CBI LOW(10),LOW(6)
\ ?0038:
169 }
170 }
\ 00000232 F991 LD R31,Y+
\ 00000234 FFBF OUT LOW(63),R31
\ 00000236 F991 LD R31,Y+
\ 00000238 E991 LD R30,Y+
\ 0000023A 7991 LD R23,Y+
\ 0000023C 6991 LD R22,Y+
\ 0000023E 5991 LD R21,Y+
\ 00000240 4991 LD R20,Y+
\ 00000242 3991 LD R19,Y+
\ 00000244 2991 LD R18,Y+
\ 00000246 1991 LD R17,Y+
\ 00000248 0991 LD R16,Y+
\ 0000024A 3990 LD R3,Y+
\ 0000024C 2990 LD R2,Y+
\ 0000024E 1990 LD R1,Y+
\ 00000250 0990 LD R0,Y+
\ 00000252 1895 RETI
\ ?0083:
\ 00000254 0091.... LDS R16,LWRD(UartTxSem)
\ 00000258 1091.... LDS R17,LWRD((UartTxSem+1))
\ 0000025C 0895 RET
\ AvrInit:
171
172 void AvrInit (void)
173 {
174 TCCR0 = 0x05; /* Set TIMER0 prescaler to CLK/1024 */
\ 0000025E 05E0 LDI R16,5
\ 00000260 03BF OUT LOW(51),R16
175 TIMSK = 0x02; /* Enable TIMER0 overflow interrupt */
\ 00000262 02E0 LDI R16,2
\ 00000264 09BF OUT LOW(57),R16
176 UBRR = 23; /* 19200 BAUD at 7.3728MHz */
\ 00000266 07E1 LDI R16,23
\ 00000268 09B9 OUT LOW(9),R16
177 MCUCR |= 0x80; /* Enable external RAM */
\ 0000026A 05B7 IN R16,LOW(53)
\ 0000026C 0068 ORI R16,LOW(128)
\ 0000026E 05BF OUT LOW(53),R16
178 UCR = 0x08; /* Enable UART transmitter */
\ 00000270 08E0 LDI R16,8
\ 00000272 0AB9 OUT LOW(10),R16
179 UDR |= 0x40; /* Clear UART transmit complete bit (TXC) */
\ 00000274 669A SBI LOW(12),LOW(6)
180 UartTxCount = 0; /* Clear number of characters to send */
\ 00000276 0027 CLR R16
\ 00000278 0093.... STS LWRD(UartTxCount),R16
181 UartTxRdPtr = 0; /* Initialize transmit buffer read pointer */
\ 0000027C 0093.... STS LWRD(UartTxRdPtr),R16
182 UartTxWrPtr = 0; /* Initialize transmit buffer write pointer */
\ 00000280 0093.... STS LWRD(UartTxWrPtr),R16
183 }
\ 00000284 0895 RET
\ PutChar:
184
185
186 void PutChar (char c)
187 {
\ 00000286 8A93 ST -Y,R24
\ 00000288 2197 SBIW R28,LOW(1)
\ 0000028A 802F MOV R24,R16
188 INT8U err;
189
190 if (UartTxCount) {
\ 0000028C 0091.... LDS R16,LWRD(UartTxCount)
\ 00000290 0023 TST R16
\ 00000292 19F0 BREQ ?0040
191 OSSemPend(UartTxSem, 0, &err); /* Wait for space in transmit buffer */
\ 00000294 EADE RCALL ?0072
\ 00000296 DEDF RCALL ?0083
\ 00000298 .... RCALL OSSemPend
\ ?0040:
192 }
193 OS_ENTER_CRITICAL();
\ 0000029A 0A93 DW LWRD(37642)
\ 0000029C 0FB7 DW LWRD(46863)
\ 0000029E F894 CLI
\ 000002A0 0F93 DW LWRD(37647)
\ 000002A2 0991 DW LWRD(37129)
194 if (UartTxCount) {
\ 000002A4 0091.... LDS R16,LWRD(UartTxCount)
\ 000002A8 0023 TST R16
\ 000002AA 89F0 BREQ ?0042
195 UartTxBuf[UartTxWrPtr] = c; /* Put character to send in transmit buffer */
\ 000002AC E091.... LDS R30,LWRD(UartTxWrPtr)
\ 000002B0 FF27 CLR R31
\ 000002B2 .... SUBI R30,LOW(-(UartTxBuf))
\ 000002B4 .... SBCI R31,HIGH(-(UartTxBuf))
\ 000002B6 8083 ST Z,R24
196 UartTxWrPtr++; /* Prepare for next character */
\ 000002B8 0091.... LDS R16,LWRD(UartTxWrPtr)
\ 000002BC 0395 INC R16
\ 000002BE 0093.... STS LWRD(UartTxWrPtr),R16
197 UartTxCount++; /* Increment number of characters to send */
\ 000002C2 0091.... LDS R16,LWRD(UartTxCount)
\ 000002C6 0395 INC R16
\ 000002C8 0093.... STS LWRD(UartTxCount),R16
198 } else {
\ 000002CC 05C0 RJMP ?0043
\ ?0042:
199 UDR = c; /* Write first char directly to the UART */
\ 000002CE 8CB9 OUT LOW(12),R24
200 UartTxCount = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -