📄 avrsms_com.s90
字号:
RSEG CODE:CODE:NOROOT(1)
// 203 void COM_put_integer( int i )
COM_put_integer:
CFI Block cfiBlock7 Using cfiCommon0
CFI Function COM_put_integer
// 204 {
FUNCALL COM_put_integer, COM_putchar
LOCFRAME CSTACK, 9, STACK
LOCFRAME RSTACK, 2, STACK
FUNCALL COM_put_integer, COM_putchar
LOCFRAME CSTACK, 9, STACK
LOCFRAME RSTACK, 2, STACK
CALL ?PROLOGUE4_L09
CFI R27 Frame(CFA_Y, -1)
CFI R26 Frame(CFA_Y, -2)
CFI R25 Frame(CFA_Y, -3)
CFI R24 Frame(CFA_Y, -4)
CFI CFA_Y Y+4
SBIW R29:R28, 5
CFI CFA_Y Y+9
MOVW R27:R26, R17:R16
// 205
// 206 int ii;
// 207 unsigned char int_buf[5];
// 208
// 209 if (i < 0) //Integer is negative
TST R27
BRPL ??COM_put_integer_0
// 210 {
// 211 i = -i; //Convert to positive Integer
NEG R27
NEG R26
SBCI R27, 0
// 212 COM_putchar('-'); //Print - sign
LDI R16, 45
RCALL COM_putchar
// 213 }
// 214
// 215 for (ii=0; ii < 5; ) //Convert Integer to char array
??COM_put_integer_0:
LDI R24, 0
LDI R25, 0
RJMP ??COM_put_integer_1
// 216 {
// 217 int_buf[ii++] = '0'+ i % 10; //Find carry using modulo operation
??COM_put_integer_2:
MOVW R17:R16, R27:R26
LDI R20, 10
LDI R21, 0
CALL ?SS_DIVMOD_L02
SUBI R20, 208
MOVW R31:R30, R29:R28
ADD R30, R24
ADC R31, R25
ST Z, R20
ADIW R25:R24, 1
// 218 i = i / 10; //Move towards MSB
MOVW R17:R16, R27:R26
LDI R20, 10
LDI R21, 0
CALL ?SS_DIVMOD_L02
MOVW R27:R26, R17:R16
// 219 }
??COM_put_integer_1:
CPI R24, 5
LDI R16, 0
CPC R25, R16
BRLT ??COM_put_integer_2
// 220 do{ ii--; }while( (int_buf[ii] == '0') && (ii != 0) ); //Remove leading 0's
??COM_put_integer_3:
SBIW R25:R24, 1
MOVW R31:R30, R29:R28
ADD R30, R24
ADC R31, R25
LD R16, Z
CPI R16, 48
BRNE ??COM_put_integer_4
MOV R16, R24
OR R16, R25
BRNE ??COM_put_integer_3
// 221 do{ COM_putchar( int_buf[ii--] ); }while (ii >= 0); //Print int->char array convertion
??COM_put_integer_4:
MOVW R31:R30, R29:R28
ADD R30, R24
ADC R31, R25
LD R16, Z
RCALL COM_putchar
SBIW R25:R24, 1
TST R25
BRPL ??COM_put_integer_4
// 222
// 223 }
ADIW R29:R28, 5
CFI CFA_Y Y+4
LDI R30, 4
JMP ?EPILOGUE_B4_L09
CFI EndBlock cfiBlock7
// 224
// 225
RSEG CODE:CODE:NOROOT(1)
// 226 void COM_puts(unsigned char *str)
COM_puts:
CFI Block cfiBlock8 Using cfiCommon0
CFI Function COM_puts
// 227 {
FUNCALL COM_puts, COM_putchar
LOCFRAME CSTACK, 2, STACK
LOCFRAME RSTACK, 2, STACK
ST -Y, R27
CFI R27 Frame(CFA_Y, -1)
CFI CFA_Y Y+1
ST -Y, R26
CFI R26 Frame(CFA_Y, -2)
CFI CFA_Y Y+2
MOVW R27:R26, R17:R16
RJMP ??COM_puts_0
// 228 for( ;*str != '\0'; )
// 229 {
// 230 COM_putchar( *str++ );
??COM_puts_1:
LD R16, X
RCALL COM_putchar
ADIW R27:R26, 1
// 231 }
??COM_puts_0:
LD R16, X
TST R16
BRNE ??COM_puts_1
// 232 }
LD R26, Y+
CFI R26 SameValue
CFI CFA_Y Y+1
LD R27, Y+
CFI R27 SameValue
CFI CFA_Y Y+0
RET
CFI EndBlock cfiBlock8
// 233
// 234
RSEG CODE:CODE:NOROOT(1)
// 235 void COM_putsf( const unsigned char __flash *fstr )
COM_putsf:
CFI Block cfiBlock9 Using cfiCommon0
CFI Function COM_putsf
// 236 {
FUNCALL COM_putsf, COM_putchar
LOCFRAME CSTACK, 2, STACK
LOCFRAME RSTACK, 2, STACK
ST -Y, R25
CFI R25 Frame(CFA_Y, -1)
CFI CFA_Y Y+1
ST -Y, R24
CFI R24 Frame(CFA_Y, -2)
CFI CFA_Y Y+2
MOVW R25:R24, R17:R16
RJMP ??COM_putsf_0
// 237 for( ;*fstr != '\0'; )
// 238 {
// 239 COM_putchar( *fstr++ );
??COM_putsf_1:
MOVW R31:R30, R25:R24
LPM R16, Z
RCALL COM_putchar
ADIW R25:R24, 1
// 240 }
??COM_putsf_0:
MOVW R31:R30, R25:R24
LPM R16, Z
TST R16
BRNE ??COM_putsf_1
// 241 }
LD R24, Y+
CFI R24 SameValue
CFI CFA_Y Y+1
LD R25, Y+
CFI R25 SameValue
CFI CFA_Y Y+0
RET
CFI EndBlock cfiBlock9
// 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 */
RSEG CODE:CODE:NOROOT(1)
// 253 int COM_trim( void )
COM_trim:
CFI Block cfiBlock10 Using cfiCommon0
CFI Function COM_trim
// 254 {
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
LDI R30, LOW(??rx_wr_i)
LDI R31, (??rx_wr_i) >> 8
LD R24, Z
LDD R25, Z+1
SBIW R25:R24, 1
RJMP ??COM_trim_0
??COM_trim_1:
SBIW R25:R24, 1
??COM_trim_0:
TST R25
BRMI ??COM_trim_2
// 259 {
// 260 temp = rx_buffer[i]; //*s into temp
MOVW R31:R30, R25:R24
SUBI R30, LOW((-(??rx_buffer) & 0xFFFF))
SBCI R31, (-(??rx_buffer) & 0xFFFF) >> 8
LD R16, Z
// 261 if( temp != '\r' && temp != '\n' && temp != 'O' && temp != 'K' )
CPI R16, 13
BREQ ??COM_trim_1
CPI R16, 10
BREQ ??COM_trim_1
CPI R16, 79
BREQ ??COM_trim_1
CPI R16, 75
BREQ ??COM_trim_1
// 262 {
// 263 break; //Check
// 264 }
// 265 }
// 266
// 267 rx_buffer[i+1] = '\0'; //Terminate trimmed string
??COM_trim_2:
LDI R16, 0
MOVW R31:R30, R25:R24
SUBI R30, LOW((-(??rx_buffer) & 0xFFFF))
SBCI R31, (-(??rx_buffer) & 0xFFFF) >> 8
STD Z+1, R16
// 268
// 269 return i; //Return new length
MOVW R17:R16, R25:R24
MOVW R25:R24, R19:R18
RET
CFI EndBlock cfiBlock10
// 270 }//end trim
// 271
// 272
RSEG CODE:CODE:NOROOT(1)
// 273 unsigned char* COM_gets( void )
COM_gets:
CFI Block cfiBlock11 Using cfiCommon0
CFI Function COM_gets
// 274 {
// 275 return rx_buffer;
LDI R16, LOW(??rx_buffer)
LDI R17, (??rx_buffer) >> 8
RET
CFI EndBlock cfiBlock11
// 276 }
COMMON INTVEC:CODE:ROOT(1)
ORG 72
`??INTVEC 72`:
JMP USART0_RX_interrupt
RSEG INITTAB:CODE:NOROOT(0)
`?<Segment init: NEAR_Z>`:
DW SFE(NEAR_Z) - SFB(NEAR_Z)
DW SFB(NEAR_Z)
DP 0
REQUIRE ?need_segment_init
RSEG NEAR_ID:CODE:NOROOT(0)
`?<Initializer for searchStrings>`:
DW OK, CMTI, READY, CR_LF
RSEG INITTAB:CODE:NOROOT(0)
`?<Segment init: NEAR_I>`:
DW SFE(NEAR_I) - SFB(NEAR_I)
DW SFB(NEAR_I)
DP SFB(NEAR_ID)
REQUIRE ?need_segment_init
ASEGN ABSOLUTE:DATA:NOROOT,029H
// union <unnamed> volatile __io _A_UBRR0L
_A_UBRR0L:
DS 1
ASEGN ABSOLUTE:DATA:NOROOT,02aH
// union <unnamed> volatile __io _A_UCSR0B
_A_UCSR0B:
DS 1
ASEGN ABSOLUTE:DATA:NOROOT,02bH
// union <unnamed> volatile __io _A_UCSR0A
_A_UCSR0A:
DS 1
ASEGN ABSOLUTE:DATA:NOROOT,02cH
// union <unnamed> volatile __io _A_UDR0
_A_UDR0:
DS 1
ASEGN ABSOLUTE:DATA:NOROOT,090H
// union <unnamed> volatile __io _A_UBRR0H
_A_UBRR0H:
DS 1
ASEGN ABSOLUTE:DATA:NOROOT,095H
// union <unnamed> volatile __io _A_UCSR0C
_A_UCSR0C:
DS 1
ASEGN ABSOLUTE:DATA:NOROOT,01cH
__?EECR:
ASEGN ABSOLUTE:DATA:NOROOT,01dH
__?EEDR:
ASEGN ABSOLUTE:DATA:NOROOT,01eH
__?EEARL:
ASEGN ABSOLUTE:DATA:NOROOT,01fH
__?EEARH:
END
// 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 */
//
// 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 + -