不复位调试的小技巧

发布时间:2024-03-07  

01 前言

本文引用地址:

在产品开发时,经常会碰到在测试过程中或设备出厂后才发现程序异常,但当重新对设备仿真调试时却复现不出现场的问题,或者只能通过保存的日志信息艰难分析代码运行到了何处而导致的异常。 

遇到这种场景,也并非无路可循。原则上只要我们通过调试时,做到代码不被重新下载覆盖, 不被,就可能保留当前程序运行的状态,让 Bug 无处藏身。

02 实现方法

首先,我们将编译完成的工程烧录到 ,保证 中所运行的代码与要仿真的工程代码一致,这样从 MCU 获取的程序位置才能与调试符号信息一致。 

不同的编译器可以通过不同的方法进行设置,但其目的和最终能达到的效果是一致的。我们就对常用的 MDK、IAR、STM32CubeIDE 三种不同编译器分别进行设置,使 MCU 在不的状态下继续调试。

03 MDK

1. 新建一个.ini 文件,在文件中写入以下内容:LOAD %L INCREMENTAL,并加载到Initialization File,同时取消 Load Application at Startup 的选项。

图片

图片

这个脚本的目的是加载编译生成的.axf 文件到 MDK 中,该文件包含 bin 代码和调试相关的各种符号信息,以定位我们的 C 源码。 

关于其语法说明,可参考 MDK 的 uVision User’s Guide。

图片

2. 去掉 Reset after Connect 选项

图片

3. 去掉 Update Target before Debugging

图片

4. 完成上述配置后,就可以在 MCU 不的情况下,像正常调试一样加断点调试了。

04 IAR

使用 IAR 时,无需额外设置,直接使用其自带的功能“Attach to Running Target”即可实现。

图片

05 STM32CubeIDE

在 STM32CubeIDE 中,配置比较灵活,可以复制一个 Debug 的配置,并在这个基础上进行修改。

图片

1. 配置 Debugger->Reset behaviour Type 为 None

图片

2. 在 Debugger->Misc 中取消 Verify flash download 选项

图片

3. 在 Startup->Load Image and Symbols 中编辑下载代码时的操作方式。并取消Download 选项

图片

图片

4. 在 Debug 时,用上述配置好的调试配置,即可同样实现不复位的调试

图片

06 总结

利用上述不复位 MCU 继续调试的方法,能够保全现场的运行状态,重新接上即可对程序进行断点调试、单步执行等操作。对查找 Bug,发现并定位问题点,尤其对不易复现的偶发性故障十分有用。但是当 RDP Level≠0 时,因为已经开启了读保护,所以无法通过上述方法调试

文章来源于:电子产品世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>