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

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

3天内不再提示

在IAR Embedded Workbench中程序连上仿真器调试时不正常的情况

工程师邓生 来源:IAR爱亚系统 作者:IAR爱亚系统 2022-09-02 11:05 次阅读

上期我们介绍了在IAR Embedded Workbench中程序连上仿真器调试时正常但是断开仿真器单独运行时不正常的情况。

嵌入式软件开发中,有时会遇到程序断开仿真器单独运行时正常,但是连上仿真器调试时不正常。本文主要介绍在IAR Embedded Workbench中程序断开仿真器单独运行时正常但是连上仿真器调试时不正常的情况。

程序仿真调试和单独运行的区别

37495768-29de-11ed-ba43-dac502259ad0.png

原因分析及对应策略

1. 程序连上仿真器调试时Flash loader及mac宏会设置对应的寄存器和程序开始运行是通过软复位(Software Reset),而断开仿真器单独运行时需要程序设置对应的寄存器和程序开始运行是通过硬复位 (Hardware Reset)。由于程序断开仿真器单独运行时正常,连上仿真器调试的时候不需要像之前那样不使用Flash loader,只需要在调试开始之前进行一次硬复位 (Hardware Reset)(硬复位让程序在连上仿真器调试时的初始状态与断开仿真器单独运行时硬复位之后的初始状态时一致的)。

下面主要介绍如何在IAR Embedded Workbench中连上仿真器调试时进行硬复位 (Hardware Reset):

下载完成之后让程序停在复位向量而不是main函数

在IAR Embedded Workbench工程选项Options > Debugger > Setup >Run to选项:默认情况下会选中Run to main,调试器下载完成之后,程序会停在main函数。如果不勾选Run to,调试器下载完成之后,程序会停在复位向量,这样就可以从复位向量开始调试。

37730fd6-29de-11ed-ba43-dac502259ad0.png37aa4ea6-29de-11ed-ba43-dac502259ad0.png

下载完成之后通过调试器进行Hardware Reset

如果对应的硬件仿真器支持Hardware Reset并且对应的硬件仿真器的nRESET引脚连接到MCU的复位引脚nRESET, 将Reset类型改成Hardware,然后Reset(模拟程序单独运行时硬复位,并从复位向量开始调试)。

37c47d12-29de-11ed-ba43-dac502259ad0.png

下载完成之后通过外部Reset进行Hardware Reset

如果对应的硬件仿真器不支持Hardware Reset或者并且对应的硬件仿真器的nRESET引脚没有连接到MCU的复位引脚nRESET, 可以通过外部Reset对MCU进行Hardware Reset。但是外部Reset之后,程序需要停在复位向量,然后就可以通过调试器调试。 如果对应的MCU和硬件仿真器支持CORERESET选项 (Options > I-jet > Breakpoints > Catch exceptions > CORERESET),勾选CORERESET之后,调试时如果有外部Reset, 程序会停在复位向量。

注:Vector catch是arm支持的调试特性,更多信息请参考arm相关文档。

388bc4da-29de-11ed-ba43-dac502259ad0.png38b76900-29de-11ed-ba43-dac502259ad0.png

如果对应的MCU或者硬件仿真器不支持CORERESET选项,则需要在复位向量打断点,调试时如果有外部Reset, 程序会停在复位向量。

39359dca-29de-11ed-ba43-dac502259ad0.png

2. 如果Library low-level interface implementation是通过semihosting (Options > General Options > Library low-level interface implementation > Semihosted > Via semihosting)实现:

3976d0a6-29de-11ed-ba43-dac502259ad0.png

而semihosting又是通过SVC指令来实现(非Cortex-M的32位arm内核):

3b205cf6-29de-11ed-ba43-dac502259ad0.png

如果程序里面也使用了SVC,那么连上仿真器调试的时候程序会停在SVC Handler:

3b4be4b6-29de-11ed-ba43-dac502259ad0.png

可以通过将Library low-level interface implementation 设置为None (Options > General Options > Library low-level interface implementation > None):

3b65b3aa-29de-11ed-ba43-dac502259ad0.png

3. 为了提高系统的健壮性,越来越多的MCU内部集成了Watchdog, 可以让MCU在软件出错的时候复位MCU。MCU内部Watchdog控制寄存器一般会有选项可以配置Watchdog在调试模式是否使能:

3bdf2c08-29de-11ed-ba43-dac502259ad0.png3c07805e-29de-11ed-ba43-dac502259ad0.png

当Watchdog配置为调试模式不使能时,Watchdog在调试模式暂停时会停止,不会导致MCU复位。反之,当Watchdog配置为调试模式使能时,Watchdog在调试模式暂停时会继续运行,从而可能会导致MCU复位(因为暂停的时候Watchdog得不到正常的刷新)。在单独运行时,当软件运行正常时,Watchdog会正常的刷新,所以不会复位。

将MCU内部Watchdog配置成在调试模式不使能,这样在调试时,暂停的时候Watchdog会停止,不会复位MCU。

总结

本文主要介绍了在IAR Embedded Workbench中程序断开仿真器单独运行时正常但是连上仿真器调试时不正常的情况。通过分析可能的原因及对应的策略,可以解决断开仿真器单独运行时正常正常但是连上仿真器调试时不正常的问题。


审核编辑:刘清

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

    关注

    31

    文章

    5310

    浏览量

    119989
  • 仿真器
    +关注

    关注

    14

    文章

    1016

    浏览量

    83626
  • IAR
    IAR
    +关注

    关注

    5

    文章

    344

    浏览量

    36620
  • 调试器
    +关注

    关注

    1

    文章

    300

    浏览量

    23686

原文标题:程序单独运行正常但是仿真调试不正常

文章出处:【微信号:IAR爱亚系统,微信公众号:IAR爱亚系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    为什么AIC23刚上电时,工作不正常

    工作USB模式)都正常,只是声音不正常,但是经过上面的触碰后,就可以实现转为正常状态。 请问各位,这两个信号有什么关系?为啥会出现这种情况
    发表于 10-21 07:50

    仿真器的使用方法有哪些

    硬件。它可以帮助工程师实际硬件或软件部署之前,对设计进行验证和调试仿真器可以分为软件仿真器和硬件仿真器两种类型。 1.1 软件
    的头像 发表于 08-22 09:16 652次阅读

    ESP32 Dev Module上传程序运行不正常的原因?

    我的开发核心板是ESP-WROOM-32,CH9102X驱动,开发环境是Arduino IDE, 开发板选哪个?我选ESP32 Dev Module,但是感觉有点诡异,上传程序运行不正常。 应该选
    发表于 07-01 07:15

    AD7190STM32运行正常,ESP32不正常,为什么?

    STM32运行正常,ESP32不正常
    发表于 06-03 08:28

    IAR版本为Embedded Workbench 6.5 Kickstart 1.4 编绎报错怎么解决?

    请教 IAR 这个错误是什么问题 IAR版本为Embedded Workbench 6.0 Kickstart 1.30 编绎
    发表于 05-09 06:36

    如何维修安捷伦N8946电源输出不正常

    。其电压输出范围为0至200V,电流输出范围为0至140A,最大输出功率为10000W。同时,该电源支持340–440 VAC的交流输入电压范围。 维修安捷伦N8946电源输出不正常 安捷伦N8946电源输出不正常时,可以尝试以下步骤进行维修: 检查电源输入:首先确认电源
    的头像 发表于 04-23 18:07 683次阅读
    如何维修安捷伦N8946电源输出<b class='flag-5'>不正常</b>

    STM32f030的板子调试寄存不正常是什么原因导致的?

    我能确定GPIOB13,15我是设置成SPI模式,oled也正常显示但是调试寄存显示不正常是什么原因
    发表于 04-11 07:18

    IAR FOR ARM和IAR FOR STM8无法共存怎么解决?

    IAR Embedded Workbench,CD 找了原程序,发现IAR FOR ARM和FOR STM8安装完后,都叫IarIdePm
    发表于 04-07 07:39

    stm32H747M4内核使用AXI SRAM不正常的原因?

    ,断电重启之后也不正常不正常的现象是2个内核里面的点灯程序都无法运行,感觉是哪里死掉了一样。M7内核里已经配置了MPU和cache。m
    发表于 03-28 09:20

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    全球知名的嵌入式系统开发软件解决方案供应商IAR Systems近日宣布,其旗舰产品IAR Embedded Workbench for Arm功能安全版已更新至最新版本9.50.3。
    的头像 发表于 02-22 17:29 1326次阅读

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    瑞典乌普萨拉,2024年2月20日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR宣布:推出其旗舰产品IAREmbedded Workbench for Arm功能安全版的最新版本9.50.3。
    的头像 发表于 02-21 13:47 788次阅读

    MB95f718E芯片仿真烧写不正常怎么解决?

    使用同样仿真器同样的程序是能正常工作的,可以确定硬件和软件部分没有问题。不正常的芯片仿真时可以看到时钟寄存
    发表于 02-21 06:14

    IAR Embedded Workbench中计算多个地址区间的Checksum

    在前面的文章“使用IAR Embedded Workbench和MCU的CRC模块来检查代码的完整性”中介绍了如何在IAR Embedded
    的头像 发表于 01-05 12:33 1446次阅读
    <b class='flag-5'>在</b><b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中计算多个地址区间的Checksum

    仿真器和烧录的区别

    仿真器和烧录的区别  仿真器和烧录是电子技术领域中常见的两种设备,它们电子系统的开发和调试
    的头像 发表于 12-07 15:48 5078次阅读

    AD5421输出不正常是什么原因引起的?怎么解决?

    线性稳压电源Agilent E3631A提供提供+24V电源(限流40mA)给4~20mA输出模块供电。将小型校验仪串联接入24V电源供电电路,通过小型校验仪观察输出电流。 出现的问题: 用仿真器调试
    发表于 12-06 07:40