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

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

3天内不再提示

使用Tracealyzer调试Zephyr中的优先级反转

麦克泰技术 来源:麦克泰技术 2025-04-21 11:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Percepio Tracealyzer已经在600多个支持Zephyr的开发板上完成了验证,可以帮助开发人员改进Zephyr应用的调试和性能分析。

Zephyr结构良好的构建系统和配置框架使得跨硬件平台的调试和跟踪变得更加容易。最新的测试表明,Tracealyzer与我们测试的649块电路板中的617块兼容。不兼容的主板大多有内存限制(可用于跟踪的内存少于32KB),或者是需要额外主机编译器配置的模拟系统。

开发板列表:https://docs.zephyrproject.org/latest/boards/index.html#

对于Zephyr开发者来说,如果你正在使用的开发板已在支持列表中,那么现在就可以使用Tracealyzer在基于时间轴的直观界面可视化系统运行行为,包括线程执行、CPU使用情况及内核事件。

在Zephyr中使用Tracealyzer

为Zephyr设置Tracealyzer跟踪很简单,在Zephyr应用中启用Tracealyzer快照跟踪的步骤如下:

• 确保硬件有足够的内存。为了有效跟踪,建议至少使用32KB。

• 修改Zephyr配置,在project.conf添加:

CONFIG_TRACING=y CONFIG_PERCEPIO_TRACERECORDER=y CONFIG_PERCEPIO_TRC_CFG_STREAM_PORT_RINGBUFFER=y CONFIG_PERCEPIO_TRC_START_MODE_START=y

• 如果内存紧张,可以减少RingBuffer的大小:

CONFIG_PERCEPIO_TRC_CFG_STREAM_PORT_RINGBUFFER_SIZE = 5120

• 构建并运行应用程序,Tracealyzer将收集分析数据,后续可以分析这些数据了解系统行为。

有关更详细的指南,可以查看Zephyr设置文档:https://percepio.com/getstarted/latest/html/zephyr.html#using-the-syscall-extension-zephyr-3-4-0-and-later。

用Tracealyzer调试

Zephyr中的优先级反转

在像Zephyr这样的实时系统中,一个常见的问题是优先级反转,因为低优先级的任务占用了高优先级任务需要的资源导致高优先级任务被阻塞。如果任务调度和同步行为不可见,很难检测到这个问题。

诊断优先级反转示例

在一个基于Zephyr的应用程序中,其中高优先级的DataProcessingTask任务应该立即运行,但意外地延迟了。低优先级的SensorTask持有互斥信号量,阻止了DataProcessingTask任务的执行。

9de339bc-1c02-11f0-9310-92fbcf53809c.png

原则上,高优先级任务(上图的H)不应该被低优先级任务阻塞。在实践中,某些设计决策无论可能会导致这种情况发生,这种情况被称为优先级反转。

通过Tracealyzer跟踪调试

1 捕获跟踪数据:运行启用了Tracealyzer跟踪功能的应用程序,收集系统执行的快照信息。

2 分析执行时间轴:在Tracealyzer中打开跟踪文件并查看任务执行图。

3 识别阻塞依赖:使用Tracealyzer可视化工具查找DataProcessingTask任务正在等待的位置,并查看哪个低优先级任务正在占用资源。

4 确认优先级反转:如果低优先级任务(SensorTask)阻塞了高优先级任务(DataProcessingTask),检查是否启用了优先级继承机制。

5 解决问题

启用互斥信号量的优先级继承(在prj.conf中设置CONFIG_PRIORITY_CEILING=y)。

优化任务调度,减少阻塞时间。

考虑分解长时间运行的低优先级任务。

使用Tracealyzer,这种类型的分析变得简单明了,帮助用户快速查明和解决优先级反转问题。

9e2a677e-1c02-11f0-9310-92fbcf53809c.png

多任务软件系统在运行时的实际行为,取决于许多因素,比如任务和中断的时间、它们的相互作用和输入。凭借Zephyr的强大架构和我们验证的开发板支持,通过Tracealyzer跟踪工具,用户可以更好地了解Zephyr系统的运行时世界。

麦克泰技术代理Tracealyzer,具有丰富的RTOS分析软件与调试工具使用方面的知识和经验,欢迎咨询info@bmrtech.com。

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

    关注

    7

    文章

    623

    浏览量

    35387
  • 开发板
    +关注

    关注

    25

    文章

    6135

    浏览量

    113553
  • 编译器
    +关注

    关注

    1

    文章

    1670

    浏览量

    51088
  • Zephyr
    +关注

    关注

    0

    文章

    47

    浏览量

    6514

原文标题:使用Tracealyzer跟踪Zephyr调试

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RTOS应用优先级反转问题

    在嵌入式系统,如果使用基于优先级调度算法的RTOS,系统可能发生优先级反转现象。优先级
    发表于 12-14 11:00 1922次阅读

    揭秘!基于RT-Thread探究“优先级反转”下的任务调度究竟是什么样的?| 技术集结

    本文将基于RT-Thread,结合RT-Trace调试器细化到实际任务调度的粒度,来调试并逐步讲解“优先级反转”的调度和运行逻辑。如果对RT-Trace感兴趣的可以看这篇文章:国产嵌入
    的头像 发表于 08-17 10:07 2820次阅读
    揭秘!基于RT-Thread探究“<b class='flag-5'>优先级</b><b class='flag-5'>反转</b>”下的任务调度究竟是什么样的?| 技术集结

    嵌入式实时系统优先级反转是什么?

    使具有优先级的进程先于高优先级的进程执行,导致系统的崩溃。这就是所谓的优先级反转(PriorityInversion)。
    发表于 09-17 07:16

    如何理解任务优先级反转

    嵌入式实时操作系统USCOSii第四章 的 图4-15有描述 关于任务优先级反转示意图:有疑问就是为什么 在C运行时候 A B都在等待,却B获得CPU的运行权限?
    发表于 11-04 03:57

    干货 | RTOS应用优先级反转问题

    )应用优先级反转现象,如何最小化优先级反转的影响,及如何在设计避免
    发表于 03-09 15:00

    嵌入式实时系统优先级反转问题怎么解决?

    嵌入式实时系统优先级反转问题怎么解决?
    发表于 04-27 06:44

    如何使用Tracealyzer理解多任务调度?

    调试器视图的补充。我们今天来了解一下如何通过Tracealyzer记录的数据获取任务优先级及执行时间相关的信息。优先级决定何时调度大多数RTOS使用固定
    发表于 12-17 16:01

    嵌入式系统优先级反转问题的分析

    摘要: 本文介绍了嵌入式系统任务调度优先级反转的一个实例。通过实例的讨论对嵌入式系统优先级反转有一个更深入的了解,有助于在编程
    发表于 03-11 12:18 1145次阅读
    嵌入式系统<b class='flag-5'>优先级</b><b class='flag-5'>反转</b>问题的分析

    UCOS扩展例程-UCOSIII优先级反转

    UCOS扩展例程- UCOSIII优先级反转
    发表于 12-14 17:24 13次下载

    关于嵌入式系统优先级反转的原因及解决方法探讨

    的任务。但在实际开发,由于任务间资源共享,信号量及中断的引入,往往会出现高优先级任务被低优先级任务长时间阻塞或阻塞一段不确定时间的现象,即所谓优先级
    发表于 11-01 16:13 5996次阅读
    关于嵌入式系统<b class='flag-5'>优先级</b><b class='flag-5'>反转</b>的原因及解决方法探讨

    嵌入式系统优先级反转的产生原因及2种解决方案

    ,反而使具有优先级的进程先于高优先级的进程执行,导致系统的崩溃。这就是所谓的优先级反转(Priority Inversion)。
    发表于 03-13 09:11 4504次阅读
    嵌入式系统<b class='flag-5'>中</b><b class='flag-5'>优先级</b><b class='flag-5'>反转</b>的产生原因及2种解决方案

    uC/OS-II学习笔记——优先级反转优先级继承机制

    优先级反转,是指某同步资源被较低优先级的进程/线程所拥有,较高优先级的进程/线程竞争该同步资源未获得该资源,而使得较高优先级进程/线程反而推
    发表于 02-09 10:33 2次下载
    uC/OS-II学习笔记——<b class='flag-5'>优先级</b><b class='flag-5'>反转</b>与<b class='flag-5'>优先级</b>继承机制

    具有固定优先级调度程序RTOS的优先级倒置

      优先级继承并不能真正治愈优先级倒置,它只是在某些情况下将其影响最小化。硬实时应用程序仍应仔细设计,以便一开始就不会发生优先级反转
    的头像 发表于 06-22 15:45 1878次阅读
    具有固定<b class='flag-5'>优先级</b>调度程序RTOS的<b class='flag-5'>优先级</b>倒置

    什么是优先级反转

    ,才能运行TaskC,TaskC释放信号量之后高优先级的TaskA才能执行。看起来高优先级的TaskA还不如低优先级的TaskC优先级高,这就叫做
    的头像 发表于 04-24 13:01 3188次阅读
    什么是<b class='flag-5'>优先级</b><b class='flag-5'>反转</b>

    什么是RTOS优先级反转

    当一个高优先级任务正在等待一个资源,但一个低优先级任务正在持有它,一个中等优先级任务继续在中间运行时,就会发生优先级反转——阻止低
    的头像 发表于 09-09 14:50 781次阅读