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

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

3天内不再提示

减少调试时间的 3 个技巧

李微波 ? 来源:夜猫煮茶 ? 作者:夜猫煮茶 ? 2022-07-14 08:17 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

There are a lot of potential changes that software development teams can make to decrease the time they spend debugging and get it into single-digit percentages.

工程师喜欢解决问题。这就是我们所做的。不幸的是,嵌入式软件工程师最大的问题之一是我们制造了很多问题,然后通过花费大量时间来修复它们(调试!)使自己成为英雄。嵌入式软件工程师花费 20% 到 40% 的时间进行调试的公司很常见!值得庆幸的是,团队可以做出很多潜在的改变来减少他们花费在调试上的时间,并将其降低到个位数的百分比。在本文中,我们将研究几个减少调试时间的技巧。

提示 #1 – 拥抱测试驱动开发 (TDD)

测试驱动开发是一种允许开发人员增量构建他们的生产软件的技术,他们依靠测试来指示他们编写的代码。例如,TDD 让开发人员首先编写一个测试用例,使其失败,然后只编写允许该测试用例通过的代码。然后重复该过程。

传统上,嵌入式软件开发人员会在测试之前编写整个代码模块。在几周内编写数千行代码是可能的。那么,到了测试它的时候,如果它不起作用,问题在哪里呢?只有天知道!开发人员必须煞费苦心地回顾代码并发现问题所在并修复它。执行此操作所需的时间可能相当可观。

另一方面,对于使用 TDD 的开发者来说,如果出现错误并在代码中注入了 bug,测试用例会立即告诉开发者!由于他们正在逐步编写代码,因此他们更有可能确切地知道他们所做的更改并可以立即解决问题。TDD 似乎需要更多时间来练习,但它创建了一组可以在回归测试中运行的测试用例,以确保一切都按预期工作。TDD 一石二鸟:减少调试时间和自动化测试。

提示 #2 – 尽可能多地开发脱靶

当一个项目开始时,几乎每个嵌入式软件开发人员的第一反应就是获得一块开发板并开始编写嵌入式代码。不幸的是,在许多情况下,嵌入式代码并不是我们产品的差异化因素。这是应用程序代码。虽然许多应用程序代码最终需要与硬件交互,但许多模块可以脱靶开发,即在主机上。

开发脱靶代码为开发人员提供了许多减少每个调试周期所花费时间的机会。例如,通常,要为目标微控制器编写和测试代码,开发人员必须:

交叉编译代码

启动调试会话

通过 SWD 对设备进行编程

在目标上运行代码

通过在目标上运行代码来验证代码是否正常工作(还必须具有所有低级代码)。

如果代码是在主机上开发的,开发人员必须为主机编译它,然后使用单元测试工具、仿真器或自定义程序来运行正在开发的代码。如果发现问题,修复、重新编译并重新开始会更快。在嵌入式目标上,仅对目标进行编程就会使每个周期增加几十秒,更不用说单步执行代码的诱惑了。

脱靶开发/调试可能会产生特定的错误。但是,我现在编写了大约 75% 的代码偏离目标,并且发现我的速度更快、效率更高。我可以快速强制代码中的问题,确定原因,修复它,然后继续前进,而不是通过嵌入式目标跟踪问题。当然,有些事情会出现在目标上,而不会出现在主机上。

提示 #3 – 掌握调试策略

人类已知的效率最低的调试方法是单步调试代码行。不要误会我的意思,有时间和地点,但往往会浪费很多时间。不幸的是,嵌入式软件开发人员默认使用断点和单步调试。为了更好地调试,开发人员需要掌握现代微控制器上可用的其他调试策略。

今天,至少有八种不同的调试技术可供开发人员使用。这些技术从最简单到最复杂的顺序包括:

Watch / Expressions:为开发人员提供检查 CPU 和外设寄存器的能力。它们通常可用于监视变量、执行计算或在更改时停止 CPU。

断点:为开发人员提供在特定代码行上停止 CPU 执行的能力。高级断点可用于设置条件语句。

printf:为开发人员提供将字符数据打印到映射的串行接口的能力。根据实现,这可能会或可能不会影响实时性能。

断言:这些是用于验证程序中特定点的假设的条件语句。断言失败通常会停止 CPU 并提供失败断言的文件和行位置。

Statistical Profiling:对应用程序中的各种寄存器进行定期采样,这些寄存器同时发生在其运行中。通常不会影响实时性能。例如,可能想要对程序计数器 (PC) 进行采样以了解正在执行的代码模块。

数据分析:对包含可变数据的各种内存位置进行定期采样。当与实时可视化工具一起使用来监控系统状态、感兴趣的变量变化等时,数据分析会非常有用。

任务和数据跟踪:使开发人员能够跟踪实时操作系统应用程序中的事件。因此,开发人员可以深入了解应用程序性能、任务延迟、运行时间等等。

指令跟踪:使开发人员能够记录在处理器上执行的每条指令。这可用于了解测试期间的代码覆盖率、调试编译器问题等。

掌握所有这些技术并知道何时使用它们可以大大减少当缺陷确实进入系统时用于调试的时间。

结论

可能会花费大量时间调试嵌入式软件。有时,调试时间是无法避免的;但是,在许多情况下,开发人员可能会花费比他们需要的时间更多的时间。我们已经探索了几个您可以进一步调查的领域,以减少您和您的团队花费在调试上的时间。如果您花费超过 20% 的时间进行调试,请在本周花一个小时确定您可以立即开始进行哪些更改,以控制您花在调试上的时间。

审核编辑 黄昊宇

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

    关注

    5161

    文章

    19801

    浏览量

    320068
  • 调试
    +关注

    关注

    7

    文章

    615

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何实现NXP S32K3系列MCU安全调试

    随着汽车电子系统变得越来越智能,对功能安全(Safety)的要求越来越高,同时信息安全(Security)也越来越被关注,安全调试(Secure Debug)机制已成为一重要的信息安全特性
    的头像 发表于 08-18 11:07 ?1036次阅读
    如何实现NXP S32K<b class='flag-5'>3</b>系列MCU安全<b class='flag-5'>调试</b>

    时间同步设备在复杂网络环境中的调试要点

    时间同步设备是保障网络系统协同运行的基础设施,尤其在金融、电力、通信等领域对精度要求较高的场景中,其稳定性直接影响业务连续性。在实际部署中,网络环境的复杂性常给同步精度带来挑战。本文将分享几个调试过程中的经验要点。
    的头像 发表于 08-13 15:48 ?77次阅读
    <b class='flag-5'>时间</b>同步设备在复杂网络环境中的<b class='flag-5'>调试</b>要点

    硬件调试:JLink 驱动配置与调试技巧

    摘要: 本文深入探讨了 JLink 调试器在嵌入式系统硬件调试中的应用,详细阐述了 JLink 驱动配置的方法以及硬件调试技巧。本文以国科安芯的AS32系列MCU芯片为例,通过分析 JLink
    的头像 发表于 06-12 23:20 ?816次阅读
    硬件<b class='flag-5'>调试</b>:JLink 驱动配置与<b class='flag-5'>调试</b>技巧

    伺服电机过载烧毁这3参数调试细节

    深入剖析伺服电机过载保护的三大关键参数——过载保护系数、电子齿轮比和加速度曲线,结合工程实践中的调试技巧,帮助读者构建系统化的参数优化方案。 一、过载保护系数的动态平衡艺术 过载保护系数(OLP)是伺服驱动器的第一
    的头像 发表于 05-20 07:44 ?724次阅读

    FX3 GPIF CyU3PGpifWriteDataWords的传输时间延迟的原因?

    据包之间存在明显的延迟(7~9us)。 我有几个问题: 1.如何才能减少数据包之间的时间? 我希望它们能够持续下去。 2.CyU3PGpifWriteDataWords 是否仅适用于寄存器使用? 有没有我
    发表于 05-15 06:18

    如何减少dsp启动时间

    如何减少dsp启动时间?之前图中Boot code(-bcode)设置为0x1时,DSP启动时间大概为9秒。设置为0x2后,DSP的启动时间大概为1秒。对于Boot code(-bco
    发表于 04-15 06:14

    请问MPC5748G如何减少启动时间

    我正在使用 MCP5748G。通电后大约需要 100 多毫秒才能正常工作。 正常启动时间是多少毫秒?如何减少启动时间
    发表于 04-10 07:31

    58道问题!电子产品电磁兼容性学习问答~

    58问答搞懂电子产品电磁兼容性(EMC)核心问题,涵盖设计、测试与整改要点。Chrent问答部分1.为什么要对产品做电磁兼容设计?答:满足产品功能要求、减少调试时间,使产品满足电磁兼容标准的要求
    的头像 发表于 04-02 17:33 ?757次阅读
    58道问题!电子产品电磁兼容性学习问答~

    在SPI通信中启动SCLK之前如何减少CS低电平时间

    ,如捕获的图像所示。 在 SCLK 开始之前,我可以采取哪些步骤来减少 CS 低电平时间?有什么指导或建议吗?
    发表于 03-24 07:33

    如何调试时间继电器 时间继电器的工作时间设置方法

    1. 了解时间继电器的基本原理 在开始调试之前,了解时间继电器的工作原理是非常重要的。时间继电器通常由一输入电路、一
    的头像 发表于 12-09 10:40 ?5830次阅读

    socket编程中的错误处理技巧

    :错误处理能够确保程序在遇到异常情况时不会崩溃,而是能够优雅地处理问题。 提升用户体验 :通过适当的错误处理,可以给用户提供清晰的错误信息,避免用户感到困惑。 便于调试和维护 :良好的错误处理可以帮助开发者快速定位问题,减少调试时间
    的头像 发表于 11-01 17:47 ?1723次阅读

    【AI技术支持】ESP32-S3 JTAG调试问题处理

    启明云端/01你是否曾遇到过?在使用ESP32-S3模块,ESP-IDF版本为idf5.0时,调试JTAG,尝试很久也无法调通,这是为什么呢?启明云端/02这是咋回事呢?这个过程需要安装zadig
    的头像 发表于 10-30 08:01 ?2525次阅读
    【AI技术支持】ESP32-S<b class='flag-5'>3</b> JTAG<b class='flag-5'>调试</b>问题处理

    【AI技术支持】ESP32C3 开发板在Linux环境下,进行JTAG 调试演示

    启明云端/01JTAG调试工具本教程主要演示ESP32C3开发板在linux环境下,通过vscode的ESP-IDF插件使用JTAG调试工具。ESP32C3不但内置了USB-JTAG,
    的头像 发表于 10-17 08:01 ?3636次阅读
    【AI技术支持】ESP32C<b class='flag-5'>3</b> 开发板在Linux环境下,进行JTAG <b class='flag-5'>调试</b>演示

    TDA3xx ISS调优和调试基础设施

    电子发烧友网站提供《TDA3xx ISS调优和调试基础设施.pdf》资料免费下载
    发表于 10-11 10:16 ?0次下载
    TDA<b class='flag-5'>3</b>xx ISS调优和<b class='flag-5'>调试</b>基础设施

    通过优化补偿最大限度地减少导通时间抖动和纹波

    电子发烧友网站提供《通过优化补偿最大限度地减少导通时间抖动和纹波.pdf》资料免费下载
    发表于 08-26 11:34 ?0次下载
    通过优化补偿最大限度地<b class='flag-5'>减少</b>导通<b class='flag-5'>时间</b>抖动和纹波