阅读470 返回首页    go 阿里云 go 技术社区[云栖]


HI3531ARM调试printf的实现

void UART_Putc(char c)
{
    if (c == '\n')
  *(unsigned int *)(UART0_ADDR  + 0X00) =  '\r';
    delay_x(0x800);
 *(unsigned int *)(UART0_ADDR  + 0X00) = c;
 
}
unsigned int val_i=0;
void UART_Print(const char *str,...)
{
    va_list unnamed_p;
    char *sval;
    unsigned int tmp=0;
    va_start( unnamed_p, str);


    while (*str)
 {
     //
     if(*str=='%')
     {
       switch(*++str)
       {
           case 'd'://输出十进制
               break;
           case 'c'://输出字符
               break;
           case 's'://输出字符串
               for(sval = va_arg(unnamed_p,char*);*sval;sval++)
               {
                   UART_Putc(*sval);
               }
               str++;
               break;
           case 'X'://输出16十进制
           case 'x'://输出16十进制
               val_i = va_arg(unnamed_p,unsigned int);
               //
               UART_Putc('0');delay_x(0X800);
               UART_Putc('x');delay_x(0X800);
               for(i=0;i<8;i++)
               {
                   delay_x(0X800);
                   tmp = val_i>>(4*(7-i));
                   val_i = val_i&(~(0xff<<(4*(7-i))));
                   //
                   if(tmp<10)
                       UART_Putc('0'+tmp);
                   else
                       UART_Putc('A'+tmp-10);
                   //
               }
               //
               str++;
               break;
          default://输出字符
               break;
         
       }
     }
     //
  UART_Putc(*str++);
  
 }
}

最后更新:2017-04-03 12:53:47

  上一篇:go 调度子系统6_负载均衡(三)
  下一篇:go Maven的生命周期