用Percepio Tracealyzer等RTOS跟踪工具可以找到并分析调试嵌入式软件时的错误

用Percepio Tracealyzer等RTOS跟踪工具可以找到并分析调试嵌入式软件时的错误

李倩 发表于 2018-09-12 16:43:15

嵌入式资讯精选

+关注

众所周知,单独的源代码并不给出基于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对动态内存分配的调用,并可以突出显示可疑的内存泄漏。

有关如何以操作系统感知的方式调试在Avnet MiniZed板上运行的Embedded FreeRTOS应用程序的指南。 介绍在操作系统之上编写嵌入式软件应用程序,通常很难检测某些序问题或解释某些奇怪的行为。到底出了什么问题?另一件事是,在研究嵌入式操作系统,以可视方式呈现系统的运行行为会很有用。了解任务优先级,调度程序设置,队列管理,... 我发现Percepio Tracealyzer是解决这类问题的理想工具Tracealyzer可以通过两种方式工作:在快照模式下(这是本教程的内容)或在流模式下。 对于本指南,您需要一个Avnet MiniZed开发板(基于Xilinx Zynq),Xilinx vivado工具Percepio tracealyzer 4(其网站上的评估版)。 让我们开始开发本指南的硬件部分(FPGA设计)。如果您不熟悉FPGA设计,则可以打开我的硬件设计。否则,从下面开始构建基于ZYNQ7的设计: 基于zynq7的设计 在程序框图上放置以下组件: ZYNQ7 P rocessing 小号ystem 具有2个通道的AXI GPIO 连接到pl_led_g 和pl_led_r 1个通道的AXI GPIO 连接到pl_sw_1bit 您可以对ZYNQ7处理系统使用自动配置(使用预设),但是随后必须手动添加M_AXI_GP0_ACLK 端口以连接AXI从设备外围设备。 使用“自动连接”功能将AXI_GPIO模块连接到AXI总线。 不要忘记在“模块设计”的顶部添加HDL包装器。生成比特流,并将您的硬件设计导出到Vivado SDK(包括比特流)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值