📄 main.lss
字号:
{
while (!(pUSART->US_CSR & AT91C_US_RXRDY)); /* Wait for Full Rx Buffer */
100378: 4b03 ldr r3, [pc, #12] (100388 <.text+0x388>) 10037a: 681a ldr r2, [r3, #0] 10037c: 6953 ldr r3, [r2, #20] 10037e: 07d9 lsl r1, r3, #31 100380: d5fc bpl 10037c <uart0_getc+0x4> return (pUSART->US_RHR); /* Read Character */
100382: 6990 ldr r0, [r2, #24]}
100384: 4770 bx lr 100386: 0000 lsl r0, r0, #0 100388: 002c lsl r4, r5, #0 10038a: 0020 lsl r0, r4, #00010038c <myputchar>://extern char data[MSG_SIZE];
extern unsigned int length;
static void myputchar(unsigned char c)
{
10038c: b510 push {r4, lr} 10038e: 0600 lsl r0, r0, #24 100390: 0e04 lsr r4, r0, #24 if(c == '\n') uart0_putc('\r');
100392: 2c0a cmp r4, #10 100394: d102 bne 10039c <myputchar+0x10> 100396: 200d mov r0, #13 100398: ffcaf7ff bl 100330 <uart0_putc> uart0_putc(c); // see serial.c //FOR USART
10039c: 1c20 mov r0, r4 (add r0, r4, #0) 10039e: ffc7f7ff bl 100330 <uart0_putc>
//data[length]=(char)c;
//length++;
}
1003a2: bc10 pop {r4} 1003a4: bc01 pop {r0} 1003a6: 4700 bx r0001003a8 <rprintf>:
#if 0
#include "softuart.h"
static void myputchar(unsigned char c)
{
if(c == '\n') softuart_putchar('\r');
softuart_putchar(c); // see softuart.c
}
#endif
#if 0
static void myputchar(unsigned char c)
{
while ( uart0Space() < 2 );
if(c == '\n') uart0Putch('\r');
uart0Putch(c); // see uart.c
}
#endif
void rprintf(char const *format, ...)
{
1003a8: b40f push {r0, r1, r2, r3} 1003aa: b5f0 push {r4, r5, r6, r7, lr} 1003ac: b086 sub sp, #24 1003ae: ab0b add r3, sp, #44 1003b0: cb04 ldmia r3!,{r2} unsigned char scratch[SCRATCH];
unsigned char format_flag;
unsigned short base;
unsigned char *ptr;
unsigned char issigned=0;
va_list ap;
#ifdef USE_LONG
unsigned char islong=0;
unsigned long u_val=0;
long s_val=0;
#else
unsigned int u_val=0;
int s_val=0;
#endif
unsigned char fill;
unsigned char width;
va_start (ap, format);
1003b2: 9305 str r3, [sp, #20] 1003b4: e005 b 1003c2 <rprintf+0x1a> for (;;){
while ((format_flag = *(format++)) != '%'){ // Until '%' or '\0'
if (!format_flag){va_end (ap); return;}
1003b6: 2800 cmp r0, #0 1003b8: d100 bne 1003bc <rprintf+0x14> 1003ba: e0a1 b 100500 <rprintf+0x158> myputchar(format_flag);
1003bc: ffe6f7ff bl 10038c <myputchar> 1003c0: 1c32 mov r2, r6 (add r2, r6, #0) 1003c2: 7810 ldrb r0, [r2, #0] 1003c4: 1c56 add r6, r2, #1 1003c6: 2825 cmp r0, #37 1003c8: d1f5 bne 1003b6 <rprintf+0xe> }
issigned=0; //default unsigned
base = 10;
format_flag = *format++; //get char after '%'
1003ca: 7850 ldrb r0, [r2, #1] 1003cc: 1c96 add r6, r2, #2
#ifdef PADDING
width=0; //no formatting
fill=0; //no formatting
if(format_flag=='0' || format_flag==' ') //SPACE or ZERO padding ?
1003ce: 2830 cmp r0, #48 1003d0: d005 beq 1003de <rprintf+0x36> 1003d2: 2820 cmp r0, #32 1003d4: d003 beq 1003de <rprintf+0x36> 1003d6: 2200 mov r2, #0 1003d8: 9201 str r2, [sp, #4] 1003da: 9200 str r2, [sp, #0] 1003dc: e010 b 100400 <rprintf+0x58> {
fill=format_flag;
format_flag = *format++; //get char after padding char
1003de: 7831 ldrb r1, [r6, #0] if(format_flag>='0' && format_flag<='9')
1003e0: 1c0b mov r3, r1 (add r3, r1, #0) 1003e2: 3b30 sub r3, #48 1003e4: 061b lsl r3, r3, #24 1003e6: 0e1b lsr r3, r3, #24 1003e8: 1cd6 add r6, r2, #3 1003ea: 2b09 cmp r3, #9 1003ec: d904 bls 1003f8 <rprintf+0x50> 1003ee: 9000 str r0, [sp, #0] 1003f0: 2300 mov r3, #0 1003f2: 1c08 mov r0, r1 (add r0, r1, #0) 1003f4: 9301 str r3, [sp, #4] 1003f6: e003 b 100400 <rprintf+0x58> {
width=format_flag-'0';
1003f8: 9301 str r3, [sp, #4] format_flag = *format++; //get char after width char
1003fa: 9000 str r0, [sp, #0] 1003fc: 78d0 ldrb r0, [r2, #3] 1003fe: 1d16 add r6, r2, #4 }
}
#endif
#ifdef USE_LONG
islong=0; //default int value
#ifdef USE_UPPER
if(format_flag=='l' || format_flag=='L') //Long value
100400: 286c cmp r0, #108 100402: d001 beq 100408 <rprintf+0x60> 100404: 284c cmp r0, #76 100406: d101 bne 10040c <rprintf+0x64>#else
if(format_flag=='l') //Long value
#endif
{
islong=1;
format_flag = *format++; //get char after 'l' or 'L'
100408: 7830 ldrb r0, [r6, #0] 10040a: 3601 add r6, #1 }
#endif
switch (format_flag)
10040c: 2858 cmp r0, #88 10040e: d030 beq 100472 <rprintf+0xca> 100410: 2858 cmp r0, #88 100412: d80d bhi 100430 <rprintf+0x88> 100414: 2849 cmp r0, #73 100416: d02e beq 100476 <rprintf+0xce> 100418: 2849 cmp r0, #73 10041a: d804 bhi 100426 <rprintf+0x7e> 10041c: 2843 cmp r0, #67 10041e: d017 beq 100450 <rprintf+0xa8> 100420: 2844 cmp r0, #68 100422: d1cb bne 1003bc <rprintf+0x14> 100424: e027 b 100476 <rprintf+0xce> 100426: 2853 cmp r0, #83 100428: d017 beq 10045a <rprintf+0xb2> 10042a: 2855 cmp r0, #85 10042c: d1c6 bne 1003bc <rprintf+0x14> 10042e: e02e b 10048e <rprintf+0xe6> 100430: 2869 cmp r0, #105 100432: d020 beq 100476 <rprintf+0xce> 100434: 2869 cmp r0, #105 100436: d804 bhi 100442 <rprintf+0x9a> 100438: 2863 cmp r0, #99 10043a: d009 beq 100450 <rprintf+0xa8> 10043c: 2864 cmp r0, #100 10043e: d1bd bne 1003bc <rprintf+0x14> 100440: e019 b 100476 <rprintf+0xce> 100442: 2875 cmp r0, #117 100444: d023 beq 10048e <rprintf+0xe6> 100446: 2878 cmp r0, #120 100448: d013 beq 100472 <rprintf+0xca> 10044a: 2873 cmp r0, #115 10044c: d1b6 bne 1003bc <rprintf+0x14> 10044e: e004 b 10045a <rprintf+0xb2> {
#ifdef USE_CHAR
case 'c':
#ifdef USE_UPPER
case 'C':
#endif
format_flag = va_arg(ap,int);
100450: 9a05 ldr r2, [sp, #20] 100452: 7810 ldrb r0, [r2, #0] 100454: 1d13 add r3, r2, #4 100456: 9305 str r3, [sp, #20] 100458: e7b0 b 1003bc <rprintf+0x14> // no break -> run into default
#endif
default:
myputchar(format_flag);
continue;
#ifdef USE_STRING
#ifdef USE_UPPER
case 'S':
#endif
case 's':
ptr = (unsigned char*)va_arg(ap,char *);
10045a: 9a05 ldr r2, [sp, #20] 10045c: 6814 ldr r4, [r2, #0] 10045e: 1d13 add r3, r2, #4 100460: 9305 str r3, [sp, #20] 100462: e002 b 10046a <rprintf+0xc2> while(*ptr) { myputchar(*ptr); ptr++; }
100464: ff92f7ff bl 10038c <myputchar> 100468: 3401 add r4, #1 10046a: 7820 ldrb r0, [r4, #0] 10046c: 2800 cmp r0, #0 10046e: d1f9 bne 100464 <rprintf+0xbc> 100470: e7a6 b 1003c0 <rprintf+0x18> 100472: 2710 mov r7, #16 100474: e00c b 100490 <rprintf+0xe8> 100476: 9805 ldr r0, [sp, #20] continue;
#endif
#ifdef USE_OCTAL
case 'o':
#ifdef USE_UPPER
case 'O':
#endif
base = 8;
myputchar('0');
goto CONVERSION_LOOP;
#endif
#ifdef USE_INTEGER //don't use %i, is same as %d
case 'i':
#ifdef USE_UPPER
case 'I':
#endif
#endif
case 'd':
#ifdef USE_UPPER
case 'D':
#endif
issigned=1;
// no break -> run into next case
case 'u':
#ifdef USE_UPPER
case 'U':
#endif
//don't insert some case below this if USE_HEX is undefined !
//or put goto CONVERSION_LOOP; before next case.
#ifdef USE_HEX
goto CONVERSION_LOOP;
case 'x':
#ifdef USE_UPPER
case 'X':
#endif
base = 16;
#endif
CONVERSION_LOOP:
if(issigned) //Signed types
{
#ifdef USE_LONG
if(islong) { s_val = va_arg(ap,long); }
else { s_val = va_arg(ap,int); }
100478: 1d03 add r3, r0, #4 10047a: 9305 str r3, [sp, #20] 10047c: 6804 ldr r4, [r0, #0]#else
s_val = va_arg(ap,int);
#endif
if(s_val < 0) //Value negativ ?
10047e: 2c00 cmp r4, #0 100480: da03 bge 10048a <rprintf+0xe2> {
s_val = - s_val; //Make it positiv
myputchar('-'); //Output sign
100482: 202d mov r0, #45 100484: 4264 neg r4, r4 100486: ff81f7ff bl 10038c <myputchar> }
u_val = (unsigned long)s_val;
10048a: 270a mov r7, #10 10048c: e004 b 100498 <rprintf+0xf0> 10048e: 270a mov r7, #10 100490: 9805 ldr r0, [sp, #20] }
else //Unsigned types
{
#ifdef USE_LONG
if(islong) { u_val = va_arg(ap,unsigned long); }
else { u_val = va_arg(ap,unsigned int); }
100492: 1d03 add r3, r0, #4 100494: 9305 str r3, [sp, #20] 100496: 6804 ldr r4, [r0, #0]#else
u_val = va_arg(ap,unsigned int);
#endif
}
ptr = scratch + SCRATCH;
*--ptr = 0;
100498: 2200 mov r2, #0 10049a: ab02 add r3, sp, #8 10049c: 466d mov r5, sp 10049e: 72da strb r2, [r3, #11] 1004a0: 3513 add r5, #19 do
{
char ch = u_val % base + '0';
1004a2: 1c20 mov r0, r4 (add r0, r4, #0) 1004a4: 1c39 mov r1, r7 (add r1, r7, #0) 1004a6: fb11f000 bl 100acc <__umodsi3> 1004aa: 3030 add r0, #48 1004ac: 0600 lsl r0, r0, #24 1004ae: 0e00 lsr r0, r0, #24#ifdef USE_HEX
if (ch > '9')
1004b0: 2839 cmp r0, #57 1004b2: d902 bls 1004ba <rprintf+0x112> {
ch += 'a' - '9' - 1;
#ifdef USE_UPPERHEX
ch-=0x20;
1004b4: 1dc3 add r3, r0, #7 1004b6: 061b lsl r3, r3, #24 1004b8: 0e18 lsr r0, r3, #24#endif
}
#endif
*--ptr = ch;
1004ba: 3d01 sub r5, #1 1004bc: 7028 strb r0, [r5, #0] u_val /= base;
1004be: 1c39 mov r1, r7 (add r1, r7, #0) 1004c0: 1c20 mov r0, r4 (add r0, r4, #0) 1004c2: fabdf000 bl 100a40 <__udivsi3>
#ifdef PADDING
if(width) width--; //calculate number of padding chars
1004c6: 9a01 ldr r2, [sp, #4] 1004c8: 1c04 mov r4, r0 (add r4, r0, #0) 1004ca: 2a00 cmp r2, #0 1004cc: d004 beq 1004d8 <rprintf+0x130> 1004ce: 1c13 mov r3, r2 (add r3, r2, #0) 1004d0: 3b01 sub r3, #1 1004d2: 061b lsl r3, r3, #24 1004d4: 0e1b lsr r3, r3, #24 1004d6: 9301 str r3, [sp, #4]#endif
} while (u_val);
1004d8: 2c00 cmp r4, #0 1004da: d1e2 bne 1004a2 <rprintf+0xfa> 1004dc: 1c2c mov r4, r5 (add r4, r5, #0) 1004de: e003 b 1004e8 <rprintf+0x140>
#ifdef PADDING
while(width--) *--ptr = fill; //insert padding chars
1004e0: 466b mov r3, sp 1004e2: 781b ldrb r3, [r3, #0] 1004e4: 3c01 sub r4, #1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -