HI3531ARM调试printf的实现

简介: <p>void UART_Putc(char c)<br> {<br>     if (c == '\n')<br>   *(unsigned int *)(UART0_ADDR  + 0X00) =  '\r';<br>     delay_x(0x800);<br>  *(unsigned int *)(UART0_ADDR  + 0X00) = c;<br>  <br>

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++);
  
 }
}

相关文章
|
开发工具 Perl
zynq 7000 sdk下裸机can(ps/pl) 调试
zynq 7000 sdk下裸机can(ps/pl) 调试
635 0
zynq 7000 sdk下裸机can(ps/pl) 调试
|
5月前
|
Linux Android开发
Linux(6)CH9434 SPI调试笔记
Linux(6)CH9434 SPI调试笔记
196 0
|
存储 Linux
Linux下实现自己的printf函数
Linux下实现自己的printf函数
132 0
|
存储 编译器 API
【Win32准备】API,Win32入口程序,宽字符(下)
【Win32准备】API,Win32入口程序,宽字符
|
存储 编译器 API
【Win32准备】API,Win32入口程序,宽字符(上)
【Win32准备】API,Win32入口程序,宽字符
|
Linux
内核笔记](四)——内核常见调试手段(printf、dump_stack、devmem)
内核笔记](四)——内核常见调试手段(printf、dump_stack、devmem)
250 0
内核笔记](四)——内核常见调试手段(printf、dump_stack、devmem)
|
编译器 C语言 C++
scanf函数不能运行(VS2019)(解决方案)
直接放在拷贝文档里,以后每次建立新项目时就会自动添加这行代码(详情请看本人空间的:VS文件初始化教程)
201 0
scanf函数不能运行(VS2019)(解决方案)
|
芯片
STM32开发---Keil中使用printf 卡死的解决办法
方法1:使用 **use MicroLIB(微库)**,在魔术棒 / Targer 选项页中勾选use MicroLIB(下面代码的13~35行不用写) 方法2:不使用**use MicroLIB(微库)**,就要加入以下全部代码, 以支持printf函数
2140 0
STM32开发---Keil中使用printf 卡死的解决办法
|
Android开发
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
338 0
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )