众所周知,单独的源代码并不给出基于RTOS的固件实际行为的全貌表现。实时行为还取决于许多其他因素,如任务和中断的定时,输入和实时操作系统的配置。
Tracealyzer提供了前所未有的洞察基于RTOS的软件的运行世界功能,从而改善开发效率,减少上市时间,及更好的软件质量。使用Tracealyzer,可以记录RTOS及应用的实时行为,并具有强大的可视化功能,提供前所未有的洞察运行时状态的能力。这有助于加速基于RTOS的软件开发、验证和调试。
Tracealyzer支持FreeRTOS,uC/OS-III,VxWorks以及Linux的跟踪。
近日,由《嵌入式系统编程》杂志的前任主编兼行业资深人士迈克尔•巴尔(Michael Barr)撰写的三本关于软件漏洞主题的书籍,不仅列出了错误,还提出了避免它们的设计模式。
良好的设计模式是非常宝贵的,但无论如何错误总是难以避免的。在调试嵌入式软件时,使用Percepio Tracealyzer等RTOS跟踪工具可以找到并分析这些错误中的至少五个。
1、抖动
如果软件系统中有一项需要定期执行的任务,例如每10毫秒读取一次模数转换器,那么它就拥有一个对随机延迟敏感的系统 - 也称为抖动。如果10 ms间隔降低到10±2 ms,则计算精度会相应降低。
为了最大限度地减少抖动,迈克尔•巴尔指出需要微调任务优先级,并可能使用定时器中断来处理最敏感的代码。Tracealyzer在定位系统中的抖动方面非常有用。
2、优先级分配不正确
设置合适的任务优先级对于基于RTOS的系统的性能和可靠性至关重要,因为采用过高优先级运行的任务可能会导致其他任务中出现无法接受的延迟。
迈克尔•巴尔指出,速率单调分析(RMA)是一种在具有固定优先级和抢占式调度的系统中分配任务优先级的正式方法。但是,这需要有足够的有关任务行为的信息,并且任务的行为符合此分析方法的假设。
找到在所有情况下都能正常工作的任务优先级的正确组合可能非常困难,除非有一个良好的跟踪工具来显示RTOS中正在发生的事情。 Tracealyzer允许检查执行时间,执行模式以及任务的最终响应时间。这使开发者可以评估和优化其优先级分配,以实现更快的响应时间和更可靠的行为。
3、优先级反转
具有固定优先级调度程序的RTOS的核心思想是,应该在具有较低优先级的任务之前安排高优先级任务,但是当两个或多个任务需要协调其工作与全局数据区等共享资源或外围设备时,可能会导致系统出错。
其中一个可能出错的事情就是优先级反转(priority inversion),低优先级任务无意中阻止了具有更高优先级的任务。 如果你意识到这个陷阱,这也很容易地避免。 但是,如果发现系统的响应性偶尔会出现延迟,则可能是因为优先级反转。 使用Tracealyzer,可以通过绘制任务的响应时间来发现此类延迟。 要查看此图中任何极端值的原因,只需双击以显示相应的任务执行跟踪。
4、死锁
死锁是两个或多个任务之间的循环依赖。 例如,如果任务1已经获得A,并且被阻止等待B,而任务2先前已获得B,并且被阻止等待A,则这两个任务都不会被唤醒。 尽管没有更高优先级的任务正在运行,但是当多个任务突然停止执行时,可能是出现死锁问题的明确迹象。 同样,死锁的检测是Tracealyzer可以展示的内容。
如果希望避免死锁,首先要注意的是,只有当任务试图同时持有两个资源时才会发生死锁。 因此:构建代码时,使任何任务在同一时间都不会持有多个共享资源,这样不会产生死锁。
5、内存泄漏
通常不建议在嵌入式软件中进行动态内存分配,但有时会出于各种原因(对或错)进行动态内存分配。问题在于,如果使用它,则必须确保一旦内存块不再使用时,就释放每个已分配的内存块。如果在某些情况下遗漏了这一点,就会出现内存泄漏,并最终耗尽内存。请记住:即使在项目中禁止动态内存分配,也可能有第三方软件库或外部开发团队在不知情的情况下使用动态内存分配。
如果内存泄漏只是偶尔发生,那么它就特别危险,因为在功能测试期间很容易错过“缓慢”的内存泄漏,但在部署单元一段时间后,可能会导致严重错误。考虑到许多嵌入式系统的长期运行特性,以及一些安全关键系统可能存在的致命或严重故障,内存泄漏是绝对不希望在软件中出现的一个错误。
Tracealyzer可以监视RTOS对动态内存分配的调用,并可以突出显示可疑的内存泄漏。
-
嵌入式软件
+关注
关注
4文章
240浏览量
26620 -
RTOS
+关注
关注
22文章
809浏览量
119439
原文标题:在调试嵌入式软件时,使用跟踪工具可以找到一些典型错误!
文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论