⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lss

📁 MMC/SD on Olimex Sam7-EX256
💻 LSS
📖 第 1 页 / 共 5 页
字号:
{    

  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 + -