你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何使用Tracealyzer解决串口输出异常?

[复制链接]
麦克泰技术 发布时间:2021-1-21 13:54
Percepio公司的Tracealyzer是业界领先的RTOS可视化跟踪工具,可以用来辅助RTOS应用程序开发,捕获依靠单独的源代码分析无法发现的问题。目前Tracealyzer提供了30多种相互关联的运行时行为视图,包括任务调度、中断、任务之间的相互作用,以及从应用程序代码中记录的用户事件。Tracealyzer作为传统调试的补充,提供更高层次的调试视图,非常适合理解典型的实时问题。Tracealyzer对系统运行时的行为提供了前所未有的洞察方法。帮助开发人员加快固件的开发,减少对系统验证和性能优化所需要的时间。
1.jpg
下面以一个简单的应用程序问题来演示Tracealyzer如何辅助解决RTOS应用程序中的串口输出错误。
3 w/ {1 k  w9 R6 d8 Y& i
如下图所示,在一个任务Task中间通过串口输出一串固定的字符串,但在运行过程中发现某一个时刻输出的字符串数据出现了错误。字符串内容输出到一半时输出内容发生了改变。
2.jpg
那么此时如何判断是什么原因导致数据输出错误呢?可以看到大多数情况下输出均是正常的,只有偶尔的时刻输出异常,如何找到这类问题的原因呢?若仅仅是分析源码,大多数情形下输出是正常的,说明UART串口输出函数本身是正常的。这类偶发性问题通常难以定位原因。

! ]# t+ Y+ d7 V- Z
此时可以借助Tracealyzer来分析该问题,首先我们需要在该串口输出函数_write中添加一个语句vTracePrint(UART_EVENTS,buffer)来使Tracealyzer能够对串口输出这一用户事件进行跟踪记录。
3.jpg
进一步分析右侧的任务调度视图,我们可以发现,在黄色矩形块代表的Task1的执行过程中,高优先级的Task2抢占了Task1任务的运行,导致Task1任务串口输出尚未完成时即停止了运行,Task2的输出替换了Task1的输出,这也就解释了最开始的串口输出异常。
4.jpg
导致上面问题的原因是仅存在一个串口输出,而Task1和Task2对这个资源进行了抢夺。那么如何解决上面的问题呢?我们可以对这个资源创建一个互斥信号量来进行管理,Task1和Task2只有在获得该互斥信号量的情况下,才能使用串口输出。

/ h9 t7 x  e7 N% R  L4 G
如下面的跟踪视图所示,Task1首先获得了互斥信号量UART_Mutex,Task 2抢占Task 1后也尝试去获取该互斥信号量,获取信号量失败而阻塞等待,Task1得以继续运行。当Task 1串口输出完成后释放互斥信号量,Task 2获得该互斥信号量后继续运行。
5.jpg
通过互斥信号量的使用,解决了上面的输出异常问题。
6.jpg
本文仅以一个简单的示例介绍了Tracealyzer在RTOS应用程序开发过程中的作用。

+ N/ P5 S2 `6 t9 M  N+ R
Tracealyzer更多的功能介绍和申请评估请参考Percepio公司官网:
https://percepio.com/tracealyzer/

, r9 S; J& ^/ E% q$ y. e* \
收藏 1 评论0 发布时间:2021-1-21 13:54

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版