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中程序断开仿真器单独运行时正常但是连上仿真器调试时不正常的情况。通过分析可能的原因及对应的策略,可以解决断开仿真器单独运行时正常正常但是连上仿真器调试时不正常的问题。


审核编辑:刘清

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

    关注

    30

    文章

    5027

    浏览量

    117711
  • 仿真器
    +关注

    关注

    14

    文章

    988

    浏览量

    82989
  • IAR
    IAR
    +关注

    关注

    5

    文章

    319

    浏览量

    36282
  • 调试器
    +关注

    关注

    1

    文章

    288

    浏览量

    23396

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    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 582次阅读

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

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

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

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

    如何在IAR Embedded Workbench中配置生成对应代码区域的CRC校验码

    在“使用IAR Embedded Workbench和MCU的CRC模块来检查代码的完整性”一文中,介绍了如何在IAR Embedded
    的头像 发表于 10-27 11:49 862次阅读
    如何在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中配置生成对应代码区域的CRC校验码

    适用于AVR单片机的IAR embedded Workbench入门指南

    电子发烧友网站提供《适用于AVR单片机的IAR embedded Workbench入门指南.pdf》资料免费下载
    发表于 09-20 10:08 6次下载
    适用于AVR单片机的<b class='flag-5'>IAR</b> <b class='flag-5'>embedded</b> <b class='flag-5'>Workbench</b>入门指南

    自举电路不正常工作

    电路不正常工作可能会表现为无法正确启动设备,也可能会导致设备启动后运行不稳定,甚至直接崩溃。针对这种情况,我们需要仔细排查问题,找到原因并进行修复。下面就让我们一起详细地了解一下自举电路不正常工作的原因和解决
    的头像 发表于 09-17 09:44 561次阅读

    MCU调试模式下运行正常,上电自启动后运行不正常怎么解决?

    借助于仿真器,电路板keilmdk4环境下程序可以正常运行跑起来,(程序已下载到芯片中)。不断电拿掉仿
    发表于 08-18 12:31

    YRDKRL78G13 快速入门指南(IAR Embedded Workbench) Rev.1.01

    YRDKRL78G13 快速入门指南 (IAR Embedded Workbench) Rev.1.01
    发表于 08-10 18:31 0次下载
    YRDKRL78G13 快速入门指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>) Rev.1.01

    YRDKRX62N 快速入门指南(IAR Embedded Workbench)

    YRDKRX62N 快速入门指南 (IAR Embedded Workbench)
    发表于 08-04 18:30 0次下载
    YRDKRX62N 快速入门指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>)

    IAR发布最新IAR Embedded Workbench for Arm v9.40版本

      嵌入式软件和服务的全球领导者IAR发布了备受欢迎的IAR Embedded Workbench for Arm v9.40版本,最新版本引入了针对代码安全的增强功能:添加了针对Ar
    的头像 发表于 06-16 09:57 1776次阅读

    IAR Embedded Workbench中进行ARM+RISC-V多核调试

    之前的文章中,我们介绍了如何在IAR Embedded Workbench for Arm中进行多核调试,其中所有的CPU内核都是基于AR
    发表于 06-14 16:55

    IAR Embedded Workbench中进行ARM+RISC-V多核调试

    在之前的文章中,我们介绍了如何在IAR Embedded Workbench for Arm中进行多核调试,其中所有的CPU内核都是基于ARM架构。近些年来,随着RISC-V的兴起,不
    发表于 06-13 17:38 620次阅读
    在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中进行ARM+RISC-V多核<b class='flag-5'>调试</b>