📄 avrsms_com.lst
字号:
\ 00000066 2399 TST R25
\ 00000068 F7C2 BRPL ??COM_put_integer_4
222
223 }
\ 0000006A 9625 ADIW R29:R28, 5
\ 0000006C E0E4 LDI R30, 4
\ 0000006E ........ JMP ?EPILOGUE_B4_L09
224
225
\ In segment CODE, align 2, keep-with-next
226 void COM_puts(unsigned char *str)
\ COM_puts:
227 {
\ 00000000 93BA ST -Y, R27
\ 00000002 93AA ST -Y, R26
\ 00000004 01D8 MOVW R27:R26, R17:R16
\ 00000006 C003 RJMP ??COM_puts_0
228 for( ;*str != '\0'; )
229 {
230 COM_putchar( *str++ );
\ ??COM_puts_1:
\ 00000008 910C LD R16, X
\ 0000000A .... RCALL COM_putchar
\ 0000000C 9611 ADIW R27:R26, 1
231 }
\ ??COM_puts_0:
\ 0000000E 910C LD R16, X
\ 00000010 2300 TST R16
\ 00000012 F7D1 BRNE ??COM_puts_1
232 }
\ 00000014 91A9 LD R26, Y+
\ 00000016 91B9 LD R27, Y+
\ 00000018 9508 RET
233
234
\ In segment CODE, align 2, keep-with-next
235 void COM_putsf( const unsigned char __flash *fstr )
\ COM_putsf:
236 {
\ 00000000 939A ST -Y, R25
\ 00000002 938A ST -Y, R24
\ 00000004 01C8 MOVW R25:R24, R17:R16
\ 00000006 C004 RJMP ??COM_putsf_0
237 for( ;*fstr != '\0'; )
238 {
239 COM_putchar( *fstr++ );
\ ??COM_putsf_1:
\ 00000008 01FC MOVW R31:R30, R25:R24
\ 0000000A 9104 LPM R16, Z
\ 0000000C .... RCALL COM_putchar
\ 0000000E 9601 ADIW R25:R24, 1
240 }
\ ??COM_putsf_0:
\ 00000010 01FC MOVW R31:R30, R25:R24
\ 00000012 9104 LPM R16, Z
\ 00000014 2300 TST R16
\ 00000016 F7C1 BRNE ??COM_putsf_1
241 }
\ 00000018 9189 LD R24, Y+
\ 0000001A 9199 LD R25, Y+
\ 0000001C 9508 RET
242
243
244 /*! \brief Remove trailing O, K, \r and \n
245 *
246 * Trim
247 *
248 * \param input void
249 *
250 * \retval void
251 *
252 */
\ In segment CODE, align 2, keep-with-next
253 int COM_trim( void )
\ COM_trim:
254 {
\ 00000000 019C MOVW R19:R18, R25:R24
255 int i; //Help variables
256 unsigned char temp; //Help variables
257
258 for( i = rx_wr_i - 1; i >= 0; i--) //Run through COM_in[] backwards
\ 00000002 .... LDI R30, LOW(??rx_wr_i)
\ 00000004 .... LDI R31, (??rx_wr_i) >> 8
\ 00000006 8180 LD R24, Z
\ 00000008 8191 LDD R25, Z+1
\ 0000000A 9701 SBIW R25:R24, 1
\ 0000000C C001 RJMP ??COM_trim_0
\ ??COM_trim_1:
\ 0000000E 9701 SBIW R25:R24, 1
\ ??COM_trim_0:
\ 00000010 2399 TST R25
\ 00000012 F062 BRMI ??COM_trim_2
259 {
260 temp = rx_buffer[i]; //*s into temp
\ 00000014 01FC MOVW R31:R30, R25:R24
\ 00000016 .... SUBI R30, LOW((-(??rx_buffer) & 0xFFFF))
\ 00000018 .... SBCI R31, (-(??rx_buffer) & 0xFFFF) >> 8
\ 0000001A 8100 LD R16, Z
261 if( temp != '\r' && temp != '\n' && temp != 'O' && temp != 'K' )
\ 0000001C 300D CPI R16, 13
\ 0000001E F3B9 BREQ ??COM_trim_1
\ 00000020 300A CPI R16, 10
\ 00000022 F3A9 BREQ ??COM_trim_1
\ 00000024 340F CPI R16, 79
\ 00000026 F399 BREQ ??COM_trim_1
\ 00000028 340B CPI R16, 75
\ 0000002A F389 BREQ ??COM_trim_1
262 {
263 break; //Check
264 }
265 }
266
267 rx_buffer[i+1] = '\0'; //Terminate trimmed string
\ ??COM_trim_2:
\ 0000002C E000 LDI R16, 0
\ 0000002E 01FC MOVW R31:R30, R25:R24
\ 00000030 .... SUBI R30, LOW((-(??rx_buffer) & 0xFFFF))
\ 00000032 .... SBCI R31, (-(??rx_buffer) & 0xFFFF) >> 8
\ 00000034 8301 STD Z+1, R16
268
269 return i; //Return new length
\ 00000036 018C MOVW R17:R16, R25:R24
\ 00000038 01C9 MOVW R25:R24, R19:R18
\ 0000003A 9508 RET
270 }//end trim
271
272
\ In segment CODE, align 2, keep-with-next
273 unsigned char* COM_gets( void )
\ COM_gets:
274 {
275 return rx_buffer;
\ 00000000 .... LDI R16, LOW(??rx_buffer)
\ 00000002 .... LDI R17, (??rx_buffer) >> 8
\ 00000004 9508 RET
276 }
\ In segment INTVEC, offset 0x48, root
\ `??INTVEC 72`:
\ 00000048 ........ JMP USART0_RX_interrupt
\ In segment NEAR_ID, align 1, keep-with-next
\ `?<Initializer for searchStrings>`:
\ 00000000 ............ DW OK, CMTI, READY, CR_LF
\ ....
\ In segment ABSOLUTE, at 0x29
\ union <unnamed> volatile __io _A_UBRR0L
\ _A_UBRR0L:
\ 00000000 DS 1
\ In segment ABSOLUTE, at 0x2a
\ union <unnamed> volatile __io _A_UCSR0B
\ _A_UCSR0B:
\ 00000000 DS 1
\ In segment ABSOLUTE, at 0x2b
\ union <unnamed> volatile __io _A_UCSR0A
\ _A_UCSR0A:
\ 00000000 DS 1
\ In segment ABSOLUTE, at 0x2c
\ union <unnamed> volatile __io _A_UDR0
\ _A_UDR0:
\ 00000000 DS 1
\ In segment ABSOLUTE, at 0x90
\ union <unnamed> volatile __io _A_UBRR0H
\ _A_UBRR0H:
\ 00000000 DS 1
\ In segment ABSOLUTE, at 0x95
\ union <unnamed> volatile __io _A_UCSR0C
\ _A_UCSR0C:
\ 00000000 DS 1
277
278 /*
279 void COM_getParams( unsigned char **pParams )
280 {
281 unsigned char c, nState, i, p;
282
283 // nState values:
284 //0 - Looking for start of param
285 //1 - Looking for end of param
286 //2 - Complete
287 //
288
289 // Init param vector
290 for (i=0; i<8; i++)
291 pParams[i] = 0;
292
293
294 nState = 0; // Looking for first terminator
295 p = 0;
296 for (i=0; nState != 2; i++)
297 {
298 c = *( rx_buffer + i );
299
300 switch (nState)
301 {
302 case 0:
303 // Looking for start of param
304 if ( ( c >= 33 ) && ( c <= 126 ) )
305 {
306 pParams[p++] = rx_buffer + i;
307 nState = 1;
308 }
309 else if (c == '\0')
310 {
311 nState = 2;
312 }
313
314 break;
315
316 case 1:
317 // Looking for terminator
318 if ( c == '\0' || c == ' ' || c == ',' || c == '\r' || c == '\n' || c == '\n' )
319 {
320 *( rx_buffer + i ) = '\0';
321 if (c == '\0')
322 nState = 2;
323 else
324 nState = 0;
325 }
326 break;
327 }
328 }
329 }
330 */
Maximum stack usage in bytes:
Function CSTACK RSTACK
-------- ------ ------
COM_gets 0 2
COM_init 0 2
-> COM_rx_reset 0 2
COM_put_integer 9 4
-> COM_putchar 9 2
-> COM_putchar 9 2
COM_putchar 0 2
COM_puts 2 2
-> COM_putchar 2 2
COM_putsf 2 2
-> COM_putchar 2 2
COM_rx_off 0 2
COM_rx_on 0 2
COM_rx_reset 0 2
COM_setSearchString 0 2
COM_trim 0 2
USART0_RX_interrupt 10 2
Segment part sizes:
Function/Label Bytes
-------------- -----
rx_overflow 2
rx_ack 2
searchStr 1
rx_buffer 256
rx_i 2
rx_wr_i 2
OK 5
CMTI 8
READY 3
CR_LF 3
searchFor 2
searchStrings 8
COM_init 24
COM_rx_reset 62
COM_rx_on 4
COM_rx_off 4
COM_setSearchString 46
USART0_RX_interrupt 266
COM_putchar 62
i 2
COM_put_integer 114
COM_puts 26
COM_putsf 30
COM_trim 60
COM_gets 6
??INTVEC 72 4
?<Initializer for searchStrings>
8
_A_UBRR0L 1
_A_UCSR0B 1
_A_UCSR0A 1
_A_UDR0 1
_A_UBRR0H 1
_A_UCSR0C 1
Others 14
6 bytes in segment ABSOLUTE
704 bytes in segment CODE
14 bytes in segment INITTAB
4 bytes in segment INTVEC
19 bytes in segment NEAR_F
8 bytes in segment NEAR_I
8 bytes in segment NEAR_ID
269 bytes in segment NEAR_Z
731 bytes of CODE memory (+ 18 bytes shared)
277 bytes of DATA memory (+ 6 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -