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

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

3天内不再提示

无痛多线程:摆脱调试地狱的五个简单技巧

星星科技指导员 来源:嵌入式计算设计 作者:Dr. Johan Kraft 2022-11-18 17:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

多线程 RTOS 应用程序的一个更被低估的方面是,您不能只查看代码来完全理解应用程序的工作原理

你需要知道它的各个部分是如何相互通信的,你需要很多其他信息:任务需要多长时间才能执行,是否存在任何潜在的竞争条件或死锁,你是否满足你的计时要求等等。

您希望代码执行的操作和实际执行的操作可能在许多方面有所不同,这些差异在代码中既难以看到,也难以测试。对于所有使用多线程代码的开发人员来说,无论他们使用 RTOS 还是 Linux,这都是一个挑战,最好使用可视化跟踪诊断工具进行管理,这些工具可以让您深入了解我所说的代码的“黑暗面”——您可以从字面上看到它在执行时的行为。

视觉时间线是一个很好的起点。在许多情况下,查看随时间分布的软件事件、消息和任务执行非常重要,例如,当从症状中看不出错误的确切位置时,计算机在数字处理和文本日志中搜索方面可能非常出色,但通常您不知道要搜索什么。在视觉模式识别方面,人脑表现出色。

poYBAGN3S-GAJgWeAAGZXegH8Es210.png

显示软件事件的可视化时间线为您提供了嵌入式应用程序内部工作的概述,如果您需要深入挖掘以查找错误,这是一个很好的起点。

调试时更好的洞察力意味着猜测更少,找到根本原因的几率更高。在无法使用传统方法(如在断点上停止系统)的情况下,它也有很大帮助。

你说printf调试呢?是的,printf 易于部署,有时它确实是您所需要的,但它的价格很高。将调试打印输出放在对时间敏感的应用程序代码中是有风险的,并且不能很好地扩展到更复杂的应用程序和更快的处理器。此外,printf 通常非常慢,每次打印输出大约几毫秒。相比之下,软件事件跟踪的优化解决方案可以比这快 100 倍左右,允许您在同一时间段内收集更多信息。

确保在整个开发项目中测量时间和性能。如果做得好,这可以确保您能够在开发过程中检测和解决任何问题,而不是在承诺的交付日期之前与时间赛跑。

满足时序规格对于具有硬要求的实时系统至关重要,但对于几乎任何嵌入式系统的用户体验也很重要。没有人喜欢缓慢的触摸屏或慢速的wifi路由器,因为它无法提供承诺的吞吐量。同样,从源代码来看,根本原因可能并不明显,如果真正的问题是糟糕的软件设计,简单地切换到更快的处理器可能没有任何好处。

如果您发现自己处于项目的“调试地狱”中,大量的调试会消耗房间中的所有能量并阻止项目向前发展,那么可视化跟踪诊断可以帮助您。在基于 RTOS 的应用程序的软件设计中未能遵循最佳实践通常是一个主要因素,它可能以性能差、处理器负载高或瞬态错误等形式出现。任务之间的大量依赖关系是设计可以改进的另一个常见信号

即使是架构不佳的系统今天也可能运行,但它们将具有复杂和混乱的行为,再加上糟糕的可测试性,这增加了难以捉摸的错误泄漏到生产设备的风险。而且它们几乎肯定会很脆弱,因此代码或环境中的微小更改可能会导致它们失败。

可视化跟踪诊断可帮助开发人员分析和改进其软件设计,并确保稳定可靠的系统行为。当您能够更早地发现软件设计缺陷时,修复它们所需的更改更少。设计改进还可以带来更好的系统性能和响应能力,这反过来又可以让您选择更具成本效益的处理器来降低 BoM 成本或使用较低的时钟频率以延长电池寿命。

使用跟踪工具将跟踪数据连续流式传输到主机,如有必要,您可以在主计算机上存储很长的记录,甚至可以在屏幕上实时显示数据。跟踪流使您能够监视系统测试或查找难以重现的罕见错误。可视化跟踪诊断允许在高级可视化概述中发现异常,并向下钻取到特定事件以准确了解发生了什么。

最后,可视化跟踪诊断可以作为纯软件解决方案实现,不需要额外的硬件,甚至不需要调试探针。内存和处理器使用量是有成本的,但通常不超过这个成本,你可以在整个开发、测试甚至部署过程中将其保留在系统中。在所有阶段都提供这些信息意味着每个人都每天都能从中受益。

此方法允许记录应用程序中的任何相关信息,包括运行时未公开的内部数据和状态。数据可以与可视化执行时间线并行绘制,以便在运行时深入了解您的应用程序。这样,您可以制作出击败竞争对手的出色产品。

遵循这五个最佳实践,在系统级别获得所需的实时行为可见性,以提高产品质量并加快开发速度,从而更快地进入市场。

审核编辑:郭婷

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

    关注

    68

    文章

    20149

    浏览量

    247204
  • RTOS
    +关注

    关注

    25

    文章

    862

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    多线程的系统

    多线程系统的事件响应也是在中断中完成的,但事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,优先级高的线程会被优先执
    发表于 12-08 07:55

    Linux多线程对比单线程的优势

    ,而单线程则需要通过进程间通信来实现。「上下文切换开销小」:线程的上下文切换比进程小,因为它们共享相同的地址空间。「提高响应性」:多线程可以使程序更加响应用户输入或其他事件,避免阻塞。下面是一
    发表于 12-01 06:11

    rt-thread studio 如何进行多线程编译?

    ,使用的是5800h+32g内存+sn550 ssd,开启16线程编译时cpu的占用率也只能到30%,编译完整个工程需要3分钟 感觉多线程编译设置没有生效,有办法提高编译速度吗 rtthread studio版本是 2.2.9
    发表于 10-11 09:16

    【HZ-T536开发板免费体验】—— linux创建线程

    自己的私有资源。 在linux系统中,线程状态通常反映了当前线程的当前活动和执行阶段。 主要分为: 1。运行转态 2。阻塞转态 3。终止状态 如何区分单线程多线程? 在单个程序中只
    发表于 09-01 21:31

    【RA4E2开发板评测】LED1及LED2轮流点亮并同时亮8秒,体验FreeRTOS多线程

    我们要多线程操作时,就需要用到RTOS(Real-Time Operating System)。FreeRTOS实时操作系统开发里面使用到vTaskDelay函数,它是对CPU的时分复用,系统将这个
    发表于 08-24 17:24

    多线程的安全注意事项

    多线程安全是指多个线程同时访问或修改共享资源时,能够保证程序的正确性和可靠性。 开发者选择TaskPool或Worker进行多线程开发时,在TaskPool和Worker的工作线程中导
    发表于 06-20 07:49

    鸿蒙5开发宝藏案例分享---跨线程性能优化指南

    发现鸿蒙宝藏:跨线程序列化性能优化实战指南 大家好呀!今天在翻鸿蒙文档时挖到一超级实用的工具—— DevEco Profiler的序列化检测功能 !平时用<span class
    发表于 06-12 17:13

    工控一体机多线程任务调度优化:聚徽分享破解工业复杂流程高效协同密码

    在当今工业 4.0 的浪潮下,工业生产正朝着高度自动化、智能化的方向大步迈进。生产流程日益复杂,众多任务需要同时、高效地协同执行,这对工业控制系统的核心 —— 工控一体机提出了前所未有的挑战。多线程
    的头像 发表于 05-28 14:06 486次阅读

    使用Percepio View免费跟踪工具分析Zephyr应用

    Percepio View免费跟踪工具现在可以针对Zephyr应用程序进行跟踪和可视化分析了。Percepio View可以帮助开发人员理解和调试Zephyr中的固定优先级的多线程行为及复杂的线程交互。
    的头像 发表于 05-27 15:08 588次阅读
    使用Percepio View免费跟踪工具分析Zephyr应用

    一种实时多线程VSLAM框架vS-Graphs介绍

    针对现有VSLAM系统语义表达不足、地图可解释性差的问题,本文提出vS-Graphs,一种实时多线程VSLAM框架。该方案显著提升了重建地图的语义丰富度、可解释性及定位精度。实验表明
    的头像 发表于 04-19 14:07 731次阅读
    一种实时<b class='flag-5'>多线程</b>VSLAM框架vS-Graphs介绍

    HarmonyOS NEXT 原生应用/元服务-ArkTS代码调试worker/taskpool调试

    代码后,在 worker 文件中设置断点。 启动调试,当断点命中时,调试窗口会新启动一调试会话,显示 worker 线程的堆栈信息。 二、
    发表于 03-13 17:46

    请问如何在Python中实现多线程与多进程的协作?

    大家好!我最近在开发一Python项目时,需要同时处理多个任务,且每个任务需要不同的计算资源。我想通过多线程和多进程的组合来实现并发,但遇到了一些问题。 具体来说,我有两任务,一
    发表于 03-11 06:57

    请问rt-thread studio如何进行多线程编译?

    ,使用的是5800h+32g内存+sn550 ssd,开启16线程编译时cpu的占用率也只能到30%,编译完整个工程需要3分钟 感觉多线程编译设置没有生效,有办法提高编译速度吗
    发表于 02-19 08:30

    Tracealyzer如何简化调试

    如果没有专为多线程代码设计的有效调试和分析工具,开发基于Zephyr的软件可能更具有挑战性。Percepio Tracealyzer可让您快速解决问题并加快日常开发。优化您的系统以获得可靠的实时性能,获取免费评估非常方便,你在15分钟内开始使用这个软件。
    的头像 发表于 02-11 11:11 775次阅读
    Tracealyzer如何简化<b class='flag-5'>调试</b>

    Wine开发系列——如何使用Wine日志调试问题

      输出调试日志是调试程序的一种常见方法,尤其是处理那些难以捉摸的多线程错误、随机崩溃等问题时。 通过在合适的位置输出调试日志,可以帮助我们更快地定位问题所在。 对于不熟悉的代码,经常
    的头像 发表于 01-06 11:29 1819次阅读