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

    文章

    2480

    浏览量

    46521
  • 嵌入式软件
    +关注

    关注

    4

    文章

    227

    浏览量

    26381
  • 驱动开发
    +关注

    关注

    0

    文章

    129

    浏览量

    12009

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

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

收藏 人收藏

    评论

    相关推荐

    如何成为一名嵌入式C语言高手?

    如何成为一名嵌入式C语言高手? 嵌入式系统是当今科技领域的核心,而C语言则是嵌入式系统开发中最常用的编程语言之一。成为一名嵌入式C语言高手需要长
    发表于 04-07 16:03

    如何成为一名嵌入式C语言高手?

    如何成为一名嵌入式C语言高手? 嵌入式系统是当今科技领域的核心,而C语言则是嵌入式系统开发中最常用的编程语言之一。成为一名嵌入式C语言高手需要长
    发表于 03-25 14:12

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

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

    嵌入式学习步骤

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

    嵌入式自学好书推荐

    科技的发展和市场的扩大,嵌入式系统在未来仍将是一个重要的方向。 嵌入式开发的薪资待遇也较为优厚,工作时间相对前端和Java开发较少,且享有五险一金。对于应届生来说,一般薪资在6-8k;具备1-2年
    发表于 01-11 15:13

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

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

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

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

    嵌入式软件的问题分析

    需要实际开发中除完成既定的项目外,预留部分人力进行架构升级维护,持续小改动,不定期根据业务的需求进行架构的重构,未雨绸缪。 3 软件问题的分析与解决嵌入式软件由于调试手段的限制、部署场
    发表于 11-17 09:29

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

    分享一些嵌入式软件开发常用工具。 1、Keil MDK:这是德国Keil公司开发的基于8051、9051、ARM7、ARM9系列微控制器的嵌入式软件开发工具,它提供了包括C编译器、
    发表于 11-10 11:03

    嵌入式软件设计和单片机软件设计的区别是什么?

    嵌入式软件设计和单片机软件设计目前的应用很多,这两者有什么区别? 嵌入式主要说的什么?结构是啥!
    发表于 11-10 07:46

    什么是嵌入式Linux?

    之有运行程序的能力与作用。在很多智能家电开发,智能产品的研究上有着主导的作用。(对个人、团队开发产品有兴趣的朋友一定要看看嵌入式!) linux的嵌入式系统开发,涵盖了从硬件到软件设计的多个领域,并且
    发表于 10-11 13:47

    从事嵌入式工作有哪些优势?

    。 那么从事嵌入式工作有哪些优势? 一是工作强度相对较低。开发企业应用软件的IT企业,这个用户的系统搞完了,又得去搞下一个用户的,而且每个用户的需求和完成时间都不同,开发人员往往疲于奔命,重复劳动
    发表于 10-08 15:05

    嵌入式软件好还是硬件好?

    架构,有一定的C语言基础,熟悉ARM、PROTEL设计软件,有四层板开发经验。 成为优秀的嵌入式硬件开发工程师需具备以下技能:由需求分析至总体方案、详细设计的规划能力;熟练运用设计工具、设计原理图
    发表于 09-18 15:31

    如何提高嵌入式软件单元测试效率

    在本指南中,您将学习如何通过在更短的时间内运行更多的测试来增加您的单元测试吞吐量。 这种效率的提高来自于使用虚拟平台而不是物理硬件作为开发平台。 本指南对任何开发或运行嵌入式软件单元测试的人都很
    发表于 08-28 06:31

    嵌入式软件开发之如何减少调试时间

    为了减少调试时间,开发人员需要掌握现代微控制器上的先进调试策略,并得到专业开发工具的支持。下面是 IAR 提供的智能和高级调试功能。
    发表于 06-02 10:12 199次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>开发之如何<b class='flag-5'>减少调试</b><b class='flag-5'>时间</b>