嵌入式学习小组
直播中

张文琳

7年用户 168经验值
私信 关注

多任务环境下串口输出debug信息的方法是什么?

楼主的程序是基于freeRTOS的,划分成了几个任务。为了方便调试,在一些地方增加了一些从串口输出debug信息的代码,同时为了方便在编译时去掉这些代码,我是用宏定义的方法在头文件里面使用串口输出函数:
[C] 纯文本查看 复制代码
#ifdef USER_DEBUG    #define UserDebug(message) do{                               UARTprintf(message); }while(0)     #else      #define UserDebug(message)
UARTprint函数就大概相当于printf()
这么干在裸跑的非抢占式的程序里面不会出现什么问题,不过在抢占式内核里面,偶尔会出现一条以上的debug信息交错到一起的现象。
于是我又添加了另一种输出的方式:
为debug输出额外创建一个进程专用于输出,并创建一个与之相关的消息队列。如果需要串口打印一个字符串,就把字符串的指发送到队列里面。这样确实可以完全消除输出时的冲突,不过这么用就只能输出字符串,而不能像printf函数那样把多个参数也放进去用了。
有没有前辈指点一下,像这种把数目不定的参数(例如printf里的参数)用队列怎么发送出去?

回帖(3)

郑雅颖

2020-7-20 13:12:26
我也不是很懂  我是用UCOS  没用FREERTOS
举报

王艳红

2020-7-20 13:29:19
使用 sprintf  可以顺利解决这个问题.. 先使用sprintf 把要打印的内容放到一个指针或者数组里,再把他的内容填充到打印列队.
举报

冯待策

2020-7-20 13:53:07
你的想法是正确的. 只是不用把指针加到列队,而是把指针指向的内容复制到列队.  列队本身有独立的缓冲区.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分