完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
楼主的程序是基于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个回答
|
|
我也不是很懂 我是用UCOS 没用FREERTOS
|
|
|
|
使用 sprintf 可以顺利解决这个问题.. 先使用sprintf 把要打印的内容放到一个指针或者数组里,再把他的内容填充到打印列队.
|
|
|
|
你的想法是正确的. 只是不用把指针加到列队,而是把指针指向的内容复制到列队. 列队本身有独立的缓冲区.
|
|
|
|
只有小组成员才能发言,加入小组>>
876 浏览 1 评论
2276 浏览 5 评论
2586 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2394 浏览 6 评论
2294 浏览 7 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
442浏览 9评论
452浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
557浏览 6评论
432浏览 5评论
466浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 02:55 , Processed in 1.039051 second(s), Total 83, Slave 64 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号