这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 分享一种使用宏定义实现printf打印函数的方法

共6条 1/1 1 跳转至

分享一种使用宏定义实现printf打印函数的方法

工程师
2021-09-04 22:30:16     打赏

对于 printf() 函数我们并不陌生,初学C语言使用的第一个函数,其作用是在终端打印显示格式化字符串。

但是如果我们使用的是单片机运行C语言代码,如果不经任何修改直接使用 printf() 函数,结果是什么现象都没有。要想使用这个函数,常规方法是重定向 printf() 函数,结合串口来打印到串口助手上位机。这里的重定向就非常复杂了,你需要懂 printf() 函数内部实现机制。。。。。(参考正点原子的例程,本人表示看不懂太多太复杂了)

接下来我介绍一种特别简单的方法,让你不需要重定向 printf() 函数也可以实现相似的功能,就是那种%d,%f,%c。。。各种格式控制符的功能,我们想用这个函数大半原因就是为了这些功能。只要在合适的地方添加以下语句即可:

#define _DEBUG_  1         //串口打印宏函数开关,1是开,0是关,调试的时候开,调式完毕就可以一键关闭
uint8_t  USART_TX_BUF[200]; //发送缓冲,最大200字节,不能太小,如果你的内容太长会访问非法内存

#if _DEBUG_
#define ps(...)  HAL_UART_Transmit(&huart1,USART_TX_BUF,sprintf((char *)USART_TX_BUF,__VA_ARGS__),1000)//可修改到其他串口                                                                                               
#else
#define ps(...)
#endif
以上代码表示用 ps() 这个宏函数代替HAL库的串口发送函数,并且可以使用格式控制符%c,%d,%f,\r,\n等可变参数控制符。

ps()宏函数使用方法如下:

  while (1)
  {
        num++;
        ps("串口打印宏函数 \r\n");//无参数打印,\r\n表示换行
        ps("num = %d \r\n",num);//含参数%d
        HAL_Delay(500);
  }


串口助手打印情况:




关键词: printf     打印    

专家
2021-09-05 00:02:52     打赏
2楼

感谢楼主的分享,很实用了。


专家
2021-09-06 00:02:55     打赏
3楼

感谢楼主的分享,很实用了。


专家
2021-09-06 03:38:02     打赏
4楼

谢谢分享


专家
2021-09-06 08:06:17     打赏
5楼

不错的资料


专家
2021-09-06 13:14:35     打赏
6楼

感谢分享


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]