搜索
bottom↓
回复: 2

rt_kprintf()是否应考虑使用semaphore?

[复制链接]

出0入0汤圆

发表于 2010-6-30 11:33:28 | 显示全部楼层 |阅读模式
rt_kprintf()是RTT控制台的主要输出手段,也可在自行编写的应用中输出调试信息、运行状态等信息,很方便。
但是该函数的缓冲区“static char rt_log_buf[RT_CONSOLEBUF_SIZE]”并未做独占保护,任何对rt_kprintf()的调用都将直接通过vsnprintf()将新数据覆盖到rt_log_buf内。上述问题在多任务调用时应会出现。
是否考虑使用信号量?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-6-30 12:04:57 | 显示全部楼层
rt_kprintf允许在中断服务例程中使用,并且是“即时”打印出来,所以不能够使用信号量。

rt_kprintf使用了一个静态的数组(rt_log_buf)做为缓冲,可以对它进行关中断保护,但是这样对系统的性能会影响非常大,所以rt_kprintf被*特别实现*成一个完全不关中断的log输出。只有当用户确实需要输出严格一致的log时(例如用于测试),可以自行关闭中断。

出0入0汤圆

 楼主| 发表于 2010-6-30 12:52:04 | 显示全部楼层
没注意到rt_kprintf在中断服务例程里的使用:)
的确,对于中断类的异常处理能“即时”对外报告也很重要。可以接受丢失部分输出信息,“第一时间”获得最新报告的做法。(其实这个概率也很小。)
不建议“关中断”的做法,确实需要一份完整的log输出时,宁愿使用其他输出口或记录方式,配上合适的缓冲及资源争抢机制就可以了。

感谢ffxz的回复。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 14:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表