在dsp串口驱动输出上实现类似于printf函数的可变参打印输出效果。串口驱动代码自行根据使用DSP处理器编写,本文不实现串口驱动和初始化。只实现变参输入转换过程函数。
1、串口可变参打印输出实现具体代码如下如下:
#include <stdio.h>
/** max string length for uart_printf output buffer */
#define MAX_WRITE_LEN (528)
// 串口打印输出
void uart_printf(char * fmt, ...)
{
char * arg_ptr;
unsigned int i , len;
static char write_buf[MAX_WRITE_LEN];
va_start(arg_ptr, fmt);
len = vsprintf((char *)write_buf, fmt, arg_ptr);
va_end(arg_ptr);
for (i = 0; i < len; i++)
{
if ( '\0' != write_buf[i] )
{
UART_write_byte_data(write_buf[i]); //写1字节数据到串口
}
}
}
2、打印测试;
int main()
{
//串口初始化(8位数据,1位停止,无校验)
Uart_init(115200);
//串口打印输出
uart_printf("uart data out: \n");
uart_printf("#%d, 0x%02X, %5.3f\n", 10, 0xa5, 23.157);
return 0;
}
3、特别说明
若CCS编译器不支持可变参函数,需要手动设置编译器相关选项,设置步骤(Language Option --> Language Mode —> non strict ANSI),如下图: