📄 test.lst
字号:
139 }
\ 000001C2 CFC8 RJMP ?0059
\ ?0095:
\ 000001C4 E004 LDI R16,4
\ ?0094:
\ 000001C6 930A ST -Y,R16
\ 000001C8 DF52 RCALL ?0111
\ 000001CA 5F0D SUBI R16,LOW(253)
\ 000001CC 4F1F SBCI R17,LOW(255)
\ 000001CE 931A ST -Y,R17
\ 000001D0 9508 RET
\ ?0096:
\ 000001D2 930A ST -Y,R16
\ 000001D4 .... RCALL OSVersion
\ 000001D6 E644 LDI R20,LOW(100)
\ 000001D8 E050 LDI R21,0
\ 000001DA .... RJMP ?US_DIVMOD_L02
\ ?0099:
\ 000001DC 931A ST -Y,R17
\ 000001DE 930A ST -Y,R16
\ 000001E0 9508 RET
\ ?0101:
\ 000001E2 2F08 MOV R16,R24
\ 000001E4 2F19 MOV R17,R25
\ 000001E6 2F2A MOV R18,R26
\ 000001E8 2F3B MOV R19,R27
\ 000001EA E04A LDI R20,LOW(10)
\ 000001EC E050 LDI R21,LOW(0)
\ 000001EE E060 LDI R22,LOW(0)
\ 000001F0 E070 LDI R23,0
\ 000001F2 .... RJMP ?UL_DIVMOD_L03
\ ?0102:
\ 000001F4 E060 LDI R22,LOW(0)
\ 000001F6 E070 LDI R23,LOW(0)
\ 000001F8 CF3A RJMP ?0111
\ ?0104:
\ 000001FA DF39 RCALL ?0111
\ ?0103:
\ 000001FC 5F0D SUBI R16,LOW(253)
\ 000001FE 4F1F SBCI R17,LOW(255)
\ 00000200 D09E RCALL SPrintDec
\ 00000202 E006 LDI R16,6
\ 00000204 930A ST -Y,R16
\ 00000206 9508 RET
\ ?0105:
\ 00000208 E200 LDI R16,32
\ 0000020A 930A ST -Y,R16
\ 0000020C E005 LDI R16,5
\ 0000020E 930A ST -Y,R16
\ 00000210 9508 RET
\ ; i R26
\ ; data R24-R25
\ Task:
140
141 /*
142 **************************************************************************************************************
143 * TASKS
144 **************************************************************************************************************
145 */
146 C_task Task (void *data)
147 {
\ 00000212 9721 SBIW R28,LOW(1)
\ 00000214 2FA0 MOV R26,R16
\ 00000216 2FB1 MOV R27,R17
\ ?0061:
148 INT8U x;
149 INT8U y;
150 INT8U err;
151
152 for (;;) {
153 OSSemPend(RandomSem, 0, &err); /* Acquire semaphore to perform random numbers */
\ 00000218 DF28 RCALL ?0098
\ 0000021A D017 RCALL ?0106
\ 0000021C .... RCALL OSSemPend
154 x = random(80); /* Find X position where task number will appear */
\ 0000021E E500 LDI R16,80
\ 00000220 D0C9 RCALL random
\ 00000222 2F90 MOV R25,R16
155 y = random(16); /* Find Y position where task number will appear */
\ 00000224 E100 LDI R16,16
\ 00000226 D0C6 RCALL random
\ 00000228 2F80 MOV R24,R16
156 OSSemPost(RandomSem); /* Release semaphore */
\ 0000022A D00F RCALL ?0106
\ 0000022C .... RCALL OSSemPost
157 /* Display the task number on the screen */
158 VT102DispChar(x + 1, y + 5, *(char *)data, COLOR_WHITE, COLOR_BLACK);
\ 0000022E DF10 RCALL ?0092
\ 00000230 2FEA MOV R30,R26
\ 00000232 2FFB MOV R31,R27
\ 00000234 8100 LD R16,Z
\ 00000236 930A ST -Y,R16
\ 00000238 5F8B SUBI R24,LOW(251)
\ 0000023A 2F48 MOV R20,R24
\ 0000023C 9593 INC R25
\ 0000023E 2F09 MOV R16,R25
\ 00000240 D11E RCALL VT102DispChar
159 OSTimeDly(10); /* Delay 3 clock ticks */
\ 00000242 E00A LDI R16,LOW(10)
\ 00000244 E010 LDI R17,0
\ 00000246 .... RCALL OSTimeDly
160 }
161 }
\ 00000248 CFE7 RJMP ?0061
\ ?0106:
\ 0000024A 9100.... LDS R16,LWRD(RandomSem)
\ 0000024E 9110.... LDS R17,LWRD((RandomSem+1))
\ 00000252 9508 RET
\ ; data R26-R27
\ ; y R24
\ ; x R25
\ UartTxHandler:
162
163 /*
164 **************************************************************************************************************
165 * SUPPORT ROUTINES
166 **************************************************************************************************************
167 */
168
169 void UartTxHandler (void)
170 {
171 UartTxCount--; /* Decrement number of characters left to send */
\ 00000254 9100.... LDS R16,LWRD(UartTxCount)
\ 00000258 950A DEC R16
\ 0000025A 9300.... STS LWRD(UartTxCount),R16
172 if (UartTxCount) {
\ 0000025E 9100.... LDS R16,LWRD(UartTxCount)
\ 00000262 2300 TST R16
\ 00000264 F0B1 BREQ ?0063
173 OS_ENTER_CRITICAL();
\ 00000266 930A DW LWRD(37642)
\ 00000268 B70F DW LWRD(46863)
\ 0000026A 94F8 CLI
\ 0000026C 930F DW LWRD(37647)
\ 0000026E 9109 DW LWRD(37129)
174 UDR = UartTxBuf[UartTxRdPtr]; /* Place next character into UART transmit register */
\ 00000270 91E0.... LDS R30,LWRD(UartTxRdPtr)
\ 00000274 E0F0 LDI R31,LOW(0)
\ 00000276 .... SUBI R30,LOW(-(UartTxBuf))
\ 00000278 .... SBCI R31,HIGH(-(UartTxBuf))
\ 0000027A 8100 LD R16,Z
\ 0000027C B90C OUT LOW(12),R16
175 UartTxRdPtr++; /* Advance to next character */
\ 0000027E 9100.... LDS R16,LWRD(UartTxRdPtr)
\ 00000282 9503 INC R16
\ 00000284 9300.... STS LWRD(UartTxRdPtr),R16
176 OS_EXIT_CRITICAL();
\ 00000288 930A DW LWRD(37642)
\ 0000028A 910F DW LWRD(37135)
\ 0000028C BF0F DW LWRD(48911)
\ 0000028E 9109 DW LWRD(37129)
177 } else {
\ 00000290 C001 RJMP ?0064
\ ?0063:
178 UCR &= ~0x40; /* Disable UART transmit complete interrupt */
\ 00000292 9856 CBI LOW(10),LOW(6)
\ ?0064:
179 }
180 OSSemPost(UartTxSem); /* Signal that we have room for one more character */
\ 00000294 D001 RCALL ?0109
\ 00000296 .... RJMP OSSemPost
\ ?0109:
\ 00000298 9100.... LDS R16,LWRD(UartTxSem)
\ 0000029C 9110.... LDS R17,LWRD((UartTxSem+1))
\ 000002A0 9508 RET
181 }
\ AvrInit:
182
183 void AvrInit (void)
184 {
185 TCCR0 = 0x05; /* Set TIMER0 prescaler to CLK/1024 */
\ 000002A2 E005 LDI R16,5
\ 000002A4 BF03 OUT LOW(51),R16
186 TIMSK = 0x02; /* Enable TIMER0 overflow interrupt */
\ 000002A6 E002 LDI R16,2
\ 000002A8 BF09 OUT LOW(57),R16
187 UBRR = 23; /* 19200 BAUD at 7.3728MHz */
\ 000002AA E107 LDI R16,23
\ 000002AC B909 OUT LOW(9),R16
188 MCUCR |= 0x80; /* Enable external RAM */
\ 000002AE B705 IN R16,LOW(53)
\ 000002B0 6800 ORI R16,LOW(128)
\ 000002B2 BF05 OUT LOW(53),R16
189 UCR = 0x08; /* Enable UART transmitter */
\ 000002B4 E008 LDI R16,8
\ 000002B6 B90A OUT LOW(10),R16
190 UartTxCount = 0; /* Clear number of characters to send */
\ 000002B8 E000 LDI R16,LOW(0)
\ 000002BA 9300.... STS LWRD(UartTxCount),R16
191 UartTxRdPtr = 0; /* Initialize transmit buffer read pointer */
\ 000002BE 9300.... STS LWRD(UartTxRdPtr),R16
192 UartTxWrPtr = 0; /* Initialize transmit buffer write pointer */
\ 000002C2 9300.... STS LWRD(UartTxWrPtr),R16
193 }
\ 000002C6 9508 RET
\ PutChar:
194
195
196 void PutChar (char c)
197 {
\ 000002C8 938A ST -Y,R24
\ 000002CA 9721 SBIW R28,LOW(1)
\ 000002CC 2F80 MOV R24,R16
198 INT8U err;
199
200 OSSemPend(UartTxSem, 0, &err); /* Wait for space in transmit buffer */
\ 000002CE DECD RCALL ?0098
\ 000002D0 DFE3 RCALL ?0109
\ 000002D2 .... RCALL OSSemPend
201 OS_ENTER_CRITICAL();
\ 000002D4 930A DW LWRD(37642)
\ 000002D6 B70F DW LWRD(46863)
\ 000002D8 94F8 CLI
\ 000002DA 930F DW LWRD(37647)
\ 000002DC 9109 DW LWRD(37129)
202 if (UartTxCount) {
\ 000002DE 9100.... LDS R16,LWRD(UartTxCount)
\ 000002E2 2300 TST R16
\ 000002E4 F089 BREQ ?0066
203 UartTxBuf[UartTxWrPtr] = c; /* Put character to send in transmit buffer */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -