微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > 在CCS3.3调试时如何使用printf()函数呢?

在CCS3.3调试时如何使用printf()函数呢?

时间:10-02 整理:3721RD 点击:
在CCS3.3调试时如何使用printf()函数呢?

方法一:重定向printf
#include
/**----------------------------------------------
  * @brief    * @retval none
  ------------------------------------------------*/
int fputc(int ch, FILE *f)
{
//串口发送函数
  Uart_SendChar(ch);
  return ch;
}
方法二: 仿照printf自己写一个
/**-----------------------------------------------------------
*@brief 实现格式化的打印功能(仿printf)
-------------------------------------------------------------*/
#include
#include
#include
#define MAX_NUM_LEN   10                  /*最大显示位数-----*/
const char digits[] = "0123456789ABCDEF";
/**-----------------------------------------------------------
*@brief 显示终端上输出一个字符(实现print函数的移植接口)
-------------------------------------------------------------*/
static void PutChar(char c)
{
/*-------------------------write here------------------------*/
        printf("%c",c);//串口发送函数
}
/**-----------------------------------------------------------
*@brief 显示终端上输出一个字符串
-------------------------------------------------------------*/
static void PutStr(const char *str)
{
    while ( *str != '\0' )PutChar(*str++);
}
/**-----------------------------------------------------------
*@brief 在显示终端上打印数值
*@param num:显示值,base:显示值的基数,二进制、八进制、十进制..
-------------------------------------------------------------*/
static void PrintNum(long num, char base)
{
    char numStr[MAX_NUM_LEN];            /*数值字符串缓冲区---*/
    char i = 0;                          /*for numStr---------*/
    if (base 16)return;
    while (num)                          /*将数值转换成字符串--*/
    {
        numStr[i++] = digits[num % base]; /*得到的是颠倒的串--*/     
        num /= base;                      /*去掉最低位---------*/
    }
    while (i--)                          /*反向打印----------*/
    {
        PutChar(numStr);
    }
}
/**-----------------------------------------------------------
*@brief 实现类型于printf函数的格式化输出
*@attention 不支持符点
-------------------------------------------------------------*/
void print(const char *fmt, ...)
{
    char c;
    va_list var_arg;
   
    /**
    **@准备访问可变参数
    */
    va_start( var_arg, fmt );
    while ( (c = *fmt++) != '\0' )
    {
        if (c != '%')
        {
            PutChar(c);
            continue;
        }
        switch (*fmt++)         
        {
            case 'C':         
            case 'c':              /*字符型-----------------*/
            {
                PutChar( va_arg(var_arg, int) );
            }
            break;
            case 'D':
            case 'd':             /*整型-------------------*/
            {
                PrintNum(va_arg(var_arg, int), 10);
            }break;
            case 'S':
            case 's':            /*字符串型----------------*/
            {
                PutStr(va_arg(var_arg, char *));
            }break;
            case 'X':            /*十六进制----------------*/
            case 'x':
            {
                PrintNum(va_arg(var_arg, int), 16);
            }break;
            case 'O':            /*八进制-----------------*/
            case 'o':
            {
                PrintNum(va_arg(var_arg, int), 8);
            }break;
            case 'B':
            case 'b':           /*二进制------------------*/
            {
                PrintNum(va_arg(var_arg, int), 2);
            }break;
            default:            
            {
                PutChar(c);   /*未定义,直接打印----------*/
            }
            
        }
    }
    /**
    **@完成处理可变参数
    */
    va_end ( var_arg );
}

int main(int argc, char** argv)
{
        char *str="hello";       //字符串
        int v_dec = 12345;       //十进制
        int v_hex = 0x12345;     //十六进制
        int v_o   = 012345;      //八进制
        int v_b   = 0x55;        //二进制
        print("str:%s\n v_dec = %d\n v_hex = 0x%X\n v_o = %o\n v_b = %b\n",str,v_dec,v_hex,v_o,v_b);
       
        return 0;
}
控制台输出:
str:hello
v_dec = 12345
v_hex = 0x12345
v_o = 12345
v_b = 1010101
--------------------------------
Process exited with return value 0
Press any key to continue . . .

这个程序也太长了,楼上

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top