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

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

3天内不再提示

嵌入式软件减少调试时间的技巧

Linux阅码场 来源:Linux阅码场 作者:许庆伟 2022-06-30 10:01 次阅读

工程师喜欢解决问题。当然,这就是我们的工作。但不如人愿的是,嵌入式软件工程师最大的问题之一是我们自己制造了很多问题,然后花大量的时间来解决这些问题,最后使自己成为英雄(在调试上!)。有很多公司嵌入式软件工程师把20 - 40%的时间花在调试上。值得庆幸的是,从团队的角度可以做出很多潜在的改变,以减少他们花在调试上的时间,并将时间百分比压缩到个位数。在本文中,我们将研究一些减少调试时间的技巧。

技巧1-测试驱动开发(TDD)

测试驱动开发是一种允许开发人员增量地构建他们的产品软件,并依赖测试来规定他们编写代码的技术。例如,开发人员首先编写一个测试用例,如果测试失败,则编写以通过测试为目的新代码。然后重复这个过程。

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

另一方面,对于使用TDD的开发人员来说,如果出现了错误并且在代码中注入了bug,测试用例将立即告诉开发人员!由于是逐步编写代码的流程,所以更有可能确切地知道更改了程序的什么部分,并且能够立即修复问题。TDD似乎需要更多的时间来验证,但通过创建一系列的测试用例,可以在回归测试中运行这些用例,以确保一切都按照预期工作。TDD功能实现了一石二鸟的目的:减少调试和自动化测试的时间。

技巧2-尽可能无机器依赖的开发

当一个项目开始时,几乎每个嵌入式软件开发人员的第一反应就是获得一块开发板然后开始编写代码。 但不如人愿的是,在许多情况下嵌入式软件代码并不是和对手之间产品的差异化因素,差别在于应用程序代码。 虽然许多应用程序代码最终需要与硬件交互,但许多模块可以不依赖于主机器环境来进行开发。

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

1.交叉编译代码

2.启动调试会话

3.通过 SWD 对设备进行编程

4.在目标机器上运行代码

5.通过在目标机上运行来验证代码是否有效(同样的必须拥有所有Low-Level代码)

如果代码是在主机上开发的,开发人员必须在主机上编译代码,然后使用单元测试工具、仿真器或自定义程序来运行正在开发的代码。 如果发现问题,会更加快速的修复、重新编译并重新开始测试。

在嵌入式板子上,仅对目标程序进行编程就会使每个周期增加几十秒,更不用说单步执行代码了。

无机器依赖的开发/调试可能会产生特定的错误。从我现在写了大约 75% 的相关代码的例子上来看,发现会有速度更快、效率更高的效果。 我可以快速定位代码中的问题,确定原因并修复它,然后继续调试,而不是只能在嵌入式板子上跟踪问题。 当然,有些问题会出现在主机上不会出现的板子环境上。

技巧3-掌握调试策略

我们已知效率最低的调试方法就是单步调试代码。 但不要误会我的意思,有具体的程序运行时间和发生位置,往往更加会造成很多时间上的浪费。 不幸的是,嵌入式软件开发人员通常默认使用断点和单步调试的方案。 为了更好地调试,开发人员还需要掌握现代微控制器上可用的其他调试策略。

目前至少有八种不同的调试技术可供开发人员使用。 这些技术从最简单到最复杂的顺序排列如下:

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

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

打印:为开发人员提供将字符数据打印到映射的串行接口的能力,有一定概率会影响实时性能。

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

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

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

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

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

掌握所有这些技术并知道何时使用它们,可以大大减少当异常发生进入系统时用于调试的时间。

结论

我们在开发阶段可能会花费大量时间调试嵌入式软件代码。 有时调试时间是不可避免的; 但在许多情况下,开发人员可能会花费超出预期更多的时间。 我们已经探索了几个您可以进一步调查的领域,以减少您和您的团队花费在调试上的时间。 如果您在调试上花费超过整体软件周期的20%时间,那么请在本周花一个小时时间确定您在以上哪些方面可以立即调整优化,以控制花在调试上的时间。

审核编辑 :李倩

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

    关注

    7

    文章

    2655

    浏览量

    47287
  • 嵌入式软件
    +关注

    关注

    4

    文章

    239

    浏览量

    26597
  • 驱动开发
    +关注

    关注

    0

    文章

    130

    浏览量

    12059

原文标题:减少嵌入式软件调试时间的三个技巧

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式软件开发与AI整合

    嵌入式软件开发与AI整合是当前技术发展的重要趋势之一。随着人工智能技术的快速发展,嵌入式系统越来越多地集成了AI算法,以实现更复杂的智能功能。以下是关于嵌入式
    的头像 发表于 07-31 09:25 624次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>开发与AI整合

    嵌入式系统怎么学?

    系统设计与调试:需要掌握嵌入式系统的设计方法和调试技术,包括硬件设计、软件设计、电路调试等,以确保系统的稳定性和可靠性。 随着技术的不断进
    发表于 07-02 10:10

    从事嵌入式方向,一定要软硬件通吃?

    软件工程师的职责嵌入式软件工程师的主要职责是为嵌入式系统编写和调试代码,确保系统按预期工作。他们需要处理底层硬件接口、实时操作系统(RTOS
    的头像 发表于 06-05 08:10 1018次阅读
    从事<b class='flag-5'>嵌入式</b>方向,一定要软硬件通吃?

    嵌入式产品的低功耗调试实用技巧

    嵌入式产品的低功耗调试是一件较麻烦的事情,因为它既涉及到硬件又涉及到软件,影响因素非常多。但是又十分重要,因为它关系到产品的实际使用时长。
    发表于 04-28 10:23 308次阅读
    <b class='flag-5'>嵌入式</b>产品的低功耗<b class='flag-5'>调试</b>实用技巧

    嵌入式软件设计的原则分享

    嵌入式软件开发如果具有更好的阅读性、扩展性以及维护性,就需要考虑很多因素。今天给大家分享几个嵌入式软件设计的原则。
    发表于 02-25 10:54 606次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>设计的原则分享

    嵌入式软件开发应该掌握哪些知识?

    知识点学习 熟悉 Linux 的基本使用对于嵌入式软件开发至关重要。包括文件系统的管理、用户权限的控制、软件包管理等。嵌入式开发人员需要能够在 Linux 环境下进行开发、
    发表于 02-19 11:23

    嵌入式学习步骤

    硬件组件。 (4).开发固件:编写嵌入式系统的固件,这是嵌入式系统的软件部分。固件负责控制硬件并执行特定任务。 (5).调试和测试:在将嵌入式
    发表于 02-02 15:24

    嵌入式软件开发和软件开发的区别

    嵌入式软件开发和软件开发是两个不同的概念,它们在一些关键方面有着明显的区别。嵌入式软件开发是指开发嵌入
    的头像 发表于 01-22 15:27 2118次阅读

    基于功能安全的汽车嵌入式软件单元验证技术研究

    ,对满足功能安全ASIL等级的汽车嵌入式软件单元验证技术进行详细介绍,从而提高软件质量,减少软件安全隐患,对汽车
    的头像 发表于 01-07 11:27 984次阅读
    基于功能安全的汽车<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>单元验证技术研究

    聊聊嵌入式软件分层

    今天以控制LED闪烁为例,聊聊嵌入式软件分层
    的头像 发表于 12-28 09:22 620次阅读

    嵌入式软件问题的分析与解决

    软件问题的分析与解决 嵌入式软件由于调试手段的限制、部署场景的多样化、软硬件问题混合在一起、外部环境因素的影响等因素,导致软件经常会遇到一些
    的头像 发表于 12-07 15:56 654次阅读

    嵌入式硬件和软件哪个好?

    嵌入式硬件和软件哪个好? 嵌入式软硬件工程师哪个更有前途呢?一起来看看。 嵌入式是分为软硬件工程师的,首先我们先来看看嵌入式硬件工程师吧!
    发表于 12-05 15:17

    嵌入式开发为什么需要输出调试信息?

    嵌入式开发为什么需要输出调试信息? 因为输出调试信息是嵌入式开发中一项非常重要的实践,它有助于保证软件的可靠性、稳定性和性能,也是故障排查的
    发表于 11-28 16:46

    嵌入式软件的开发流程

    电子发烧友网站提供《嵌入式软件的开发流程.doc》资料免费下载
    发表于 11-17 14:39 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>的开发流程

    嵌入式软件开发流程

    电子发烧友网站提供《嵌入式软件开发流程.ppt》资料免费下载
    发表于 11-17 14:37 3次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>开发流程