嵌入式学习小组
登录
直播中
张文琳
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
我也不是很懂 我是用UCOS 没用FREERTOS
举报
王艳红
2020-7-20 13:29:19
使用 sprintf 可以顺利解决这个问题.. 先使用sprintf 把要打印的内容放到一个指针或者数组里,再把他的内容填充到打印列队.
使用 sprintf 可以顺利解决这个问题.. 先使用sprintf 把要打印的内容放到一个指针或者数组里,再把他的内容填充到打印列队.
举报
冯待策
2020-7-20 13:53:07
你的想法是正确的. 只是不用把指针加到列队,而是把指针指向的内容复制到列队. 列队本身有独立的缓冲区.
你的想法是正确的. 只是不用把指针加到列队,而是把指针指向的内容复制到列队. 列队本身有独立的缓冲区.
举报
更多回帖
rotate(-90deg);
回复
相关问答
串口输出
串口
DEBUG
只有打印
信息
的功能吗
2022-01-11
803
什么是μC/OS-II的
多任务
信息
流?什么是CAN总线驱动?
2019-08-07
1217
如何利用FreeRTOS程序完成
多任务
功能?
2022-01-18
742
51怎么做到
多任务
处理而不干扰其他
任务
?
2023-10-30
178
uCOS-II多窗口独立
多任务
演示
2017-05-15
3696
如何在μC/OS-II的
多任务
系统中实现SOPC硬件设计?
2019-10-17
1322
keil5.14在
debug
模式
下
Debug
(printf)Viewer窗口无
串口
输出
,要怎么配置?
2023-06-28
1823
调变技术与
多任务
技术有什么不同?
2021-05-19
1238
ZMC运动控制器
多任务
编程一
2023-11-07
2957
如何实现基于uC/OSII
多任务
的STM32报警模块的设计?
2021-12-20
505
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分