0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

专用工具为调试基于RTOS的系统设计

星星科技指导员 来源:嵌入式计算设计 作者:Jean Labrosse 2022-06-30 10:04 次阅读

死锁:

死锁(又名致命拥抱)是一种情况,其中(至少)两个任务都在不知不觉中等待另一个拥有的资源。死锁可能不会立即发生,因为很大程度上取决于两个任务何时需要彼此的资源。如下图所示,μC/Probe 的内核感知屏幕有一列显示每个任务执行的频率(即任务由 RTOS 切换的频率)。您可以通过监视此列来检测死锁,并注意您期望运行的任何任务是否实际上正在运行。换句话说,如果计数停止(μC/Probe 在 CPU 运行时更新这些计数器),那么您可能检测到死锁。但是,对于这种情况,您还会注意到至少有两个任务停止计数。您可能不需要使用像 μC/Probe 这样的工具来检测死锁,因为在任何情况下,您都应该注意应用程序中这些任务的锁定行为。但是,该工具使其更加明显。

poYBAGK9BMCAOxzlAAIkf9udrEY752.png

您可以通过以下方式避免死锁:

总是获取所有需要的资源,总是以相同的顺序获取它们并以相反的顺序释放它们。

在 RTOS API 调用上使用超时以避免永远等待资源可用。确保检查来自 RTOS API 的返回错误代码,以确保您对所需资源的请求确实成功。

饥饿:

当高优先级任务消耗所有 CPU 的带宽时,就会发生饥饿,为低优先级任务留下很少或没有 CPU 时间。饥饿的影响的特点是响应能力和产品功能的下降,例如嵌入式目标的显示更新缓慢、通信堆栈中的数据包丢失、操作员界面迟缓等。除了解决这些问题之外,您几乎无能为力至:

优化占用大部分 CPU 带宽的代码。

提高 CPU 的时钟速度。由于其他系统考虑,这很少是一种选择。

选择另一个 CPU。这也很少是一种选择,尤其是在开发周期的后期。

pYYBAGK9BMiARRRcAAPKnYNbEXI309.png

监控任务和 ISR 执行时间

了解任务和 ISR 的执行时间对于帮助基于 RTOS 的系统分析(例如速率单调分析 (RMA))通常很有用。具体来说,通过这些信息,您可以确定是否所有时间紧迫的任务都可以按时完成,并帮助您为任务分配优先级。不幸的是,这些信息只有在系统设计和运行后才真正准确和可用。换句话说,代码的实际执行时间通常要在实际目标上执行时才能准确知道。然而,一旦可用,任务和 ISR 执行时间对于确认系统设计期间所做的假设非常有用。

SystemView 提供任务和 ISR 的最小/最大执行时间,如下面的屏幕截图所示。

pYYBAGK9BNSASUkoAAMPHJBNBk8284.png

1 -上下文窗格中 的Max Run Time列显示所有任务和 ISR 的最大执行时间。在SysTick(即tick ISR)的情况下,最长的执行时间是0.5488 ms。我们可以通过搜索事件 #4016155 来确定何时(及时)发生了这个较长的执行时间。您只需从 Go 菜单中选择 Go to event 。.. 并键入 4016155,然后按 Enter。

2 - 事件窗口显示这对应于 ISR 出口。事实上,这是有道理的,因为只有在 ISR 退出时才知道 ISR 的最大执行时间。

3 - 双击事件窗口中显示事件 #4016155 的行会强制时间轴窗口显示该事件。可以看出,SysTick 的执行时间比其他执行时间要宽。

在大多数情况下,您不需要找到(及时)任务或 ISR 的最大执行时间发生在哪里,尤其是当您仅将该信息用于 RMA 时。但是,在某些情况下,您可能需要找出执行时间比预期或预期长得多的原因。不幸的是,SystemView 可能无法提供关于发生这种情况的原因的额外线索。您可能希望在此处使用代码执行跟踪工具(例如 Segger 的 J-Trace)并检查 ISR 在事件 #4016155 之前执行的代码。

测量用户代码的执行时间

有很多方法可以测量代码执行时间。一种方法是使用具有跟踪功能的调试探针。您只需运行代码、查看跟踪、计算增量时间(通常是手动)并将 CPU 周期转换为微秒。不幸的是,跟踪为您提供了一个执行实例,您可能需要进一步查看跟踪捕获以找到最坏情况下的执行时间。这可能是一个乏味的过程。另一种方法是检测您的代码并在代码的不同位置拍摄可用的自由运行计数器的快照,并计算快照读数之间的差异。这实际上在嵌入式计算设计[7]上发表的一篇论文中有所描述对于 Cortex-M MCU,但该概念同样适用于其他目标。该论文提供了 API 来测量经过的时间。您只需将要测量的代码包装如下:

elapsed_time_start(n);

// 测量代码

elapsed_time_stop(n);

其中“n”指定“n”个 bin(0 到 n-1)之一,其中最小和最大执行时间保存如下:

elapsed_time_tbl[n].min

elapsed_time_tbl[n].max

在 Cortex-M 的情况下,执行时间以 CPU 时钟频率单位保存。

如下图所示,您可以使用 Micrium 的 μC/Probe 轻松显示以微秒为单位的结果。μC/Probe 允许对数字进行缩放,在这种情况下,需要根据所用评估板的 CPU 时钟频率进行调整。

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzVjZDlkYzU1MWMzYTQucG5nJnZlcnNpb249MDAwMCZzaWc9YjI3ZDQzYTI3YWE3NjkxMDJiOGExMmZiYTNlOWE4NzU253D

概括

IDE 中内置的调试器通常不足以调试基于 RTOS 的实时系统。

幸运的是,有专门为调试基于 RTOS 的系统而设计的专用工具,但开发人员通常不知道这些工具。这些工具之一是 Segger 的 SystemView ,它在时间线上显示 ISR 和任务,并收集运行时统计信息,例如最小和最大执行时间、ISR 和任务之间的关系、CPU 负载等等。

另一个可以补充 SystemView 的工具是 Micrium 的 μC/Probe ,它是一种通用工具,允许开发人员在不干扰 CPU 的情况下可视化和更改正在运行的嵌入式目标的行为。μC/Probe 在裸机或基于 RTOS 的应用中同样适用。对于基于 RTOS 的应用程序,μC/Probe 包括非侵入式实时内核感知以及 TCP/IP 堆栈感知。两种类型的工具(SystemView 和 μC/Probe)都应该在早期和整个开发周期中使用,以提供有关嵌入式目标运行时行为的反馈。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4984

    文章

    18300

    浏览量

    288931
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10456

    浏览量

    206663
  • RTOS
    +关注

    关注

    20

    文章

    776

    浏览量

    118816
收藏 人收藏

    评论

    相关推荐

    脚本调试工具有哪些?脚本调试工具怎么用?

    脚本调试是软件开发过程中非常重要的一环,它能帮助开发者快速定位并解决代码中的错误。大多数编程语言都提供了各种各样的脚本调试工具,本文将介绍一些常见的脚本调试工具以及它们的基本使用方法。 GDB
    的头像 发表于 12-01 14:40 305次阅读

    嵌入式软件开发常用工具有哪些?

    收购。 2、IAR Embedded Workbench:这是一款嵌入式系统设计者提供高级开发工具的软件套装,支持ARM、Cortex-M、8051、PIC等众多微控制器。 3、Code
    发表于 11-10 11:03

    GDB调试工具的原理

    一、GDB调试工具的原理 1.1 未执行进程调试 启用gdb调试运行gdb ./test的时候,在操作系统里发生了很多复杂的事情,系统首先会
    的头像 发表于 11-09 17:04 341次阅读
    GDB<b class='flag-5'>调试工具</b>的原理

    RTOS相比裸机有什么优点?RTOS相比裸机更方便吗?

    RTOS相比裸机有什么优点?RTOS相比裸机更方便吗? RTOS代表实时操作系统,专门为需要高可靠性和可预测性的系统设计。相比之下,裸金属或
    的头像 发表于 10-29 16:33 1016次阅读

    SYNWIT MCU 时钟计算应用工具

    SYNWIT MCU 时钟计算应用工具
    的头像 发表于 10-17 15:20 271次阅读
    SYNWIT MCU 时钟计算应<b class='flag-5'>用工具</b>

    单片机常用工具

    单片机常用工具
    发表于 10-13 06:16

    车辆燃油系统如何进行压力检测?

    对车辆进行燃油系统压力检测通常需要一些专用工具和基本的机械知识。以下是一般的步骤来进行燃油系统压力检测: 注意:在进行燃油系统压力检测之前,请确保您已经熟悉车辆制造商的服务手册,
    的头像 发表于 10-07 15:01 940次阅读

    RTOS工具、安全和网络能力三个指标介绍

    PX5 RTOS的开发在很大程度上依赖于IAR bembedded workbench,特别是IDE、编译器、调试器、代码覆盖率和静态分析功能。所有这一切都集成在一个IDE,这真是太好了。更好的是,IAR工具套件的每个功能都是一
    发表于 09-26 14:46 269次阅读
    <b class='flag-5'>RTOS</b><b class='flag-5'>工具</b>、安全和网络能力三个指标介绍

    单片机开发调试工具有哪些?

    单片机的调试是一个有条不紊的过程,用于查找和减少单片机程序中的错误数量,使其按预期工作。有时候,单片机程序调试很困难,因为某一个系统模块中的微小变化可能会在另一个子系统中产生错误。单片
    的头像 发表于 07-07 12:29 1061次阅读

    IzoT 调试工具数据表

    IzoT 调试工具数据表
    发表于 07-04 20:05 0次下载
    IzoT <b class='flag-5'>调试工具</b>数据表

    IzoT 调试工具(CT) 用户指南

    IzoT 调试工具 (CT) 用户指南
    发表于 07-04 19:50 0次下载
    IzoT <b class='flag-5'>调试工具</b>(CT) 用户指南

    IC芯片测试座三个核心组成部分及特点

    IC芯片测试座是用于测试集成电路(IC)芯片的专用工具。它由三个核心组成部分构成。
    的头像 发表于 06-05 15:23 648次阅读
    IC芯片测试座三个核心组成部分及特点

    PX5 RTOS拥有对POSIX pthreads API的原生支持

    PX5 RTOS 潮流。例如,在撰写本文的时候,我听到 IAR Systems 的小伙子们说:“PX5 RTOS 刚刚推出,IAR Systems是嵌入式开发软件和服务商,已经这个新的实时操作
    发表于 05-18 13:59

    嵌入式RTOS的 任务栈 和 系统

    简介明了带你了解嵌入式RTOS的 任务栈 和 系统
    的头像 发表于 05-16 09:57 2082次阅读
    嵌入式<b class='flag-5'>RTOS</b>的 任务栈 和 <b class='flag-5'>系统</b>栈

    使用工具S32K344配置Platform模块时,INTx_IRQn的handler名称怎么写?

    使用工具S32K344配置Platform模块时,INTx_IRQn的handler名称怎么写,比如ADC0_IRQn的是Adc_Sar_0_是
    发表于 05-16 06:24