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

    文章

    5619

    浏览量

    130421
  • 仿真器
    +关注

    关注

    14

    文章

    1052

    浏览量

    88196
  • IAR
    IAR
    +关注

    关注

    5

    文章

    415

    浏览量

    38675
  • 调试器
    +关注

    关注

    1

    文章

    329

    浏览量

    25208

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RENESAS E1/E20 仿真器使用指南

    RENESAS E1/E20 仿真器使用指南 一、引言 电子工程领域,仿真器是进行硬件调试和开发的重要工具。RENESAS 的 E1/E20 仿真
    的头像 发表于 04-22 17:00 293次阅读

    Renesas E1/E20 仿真器使用指南:从规格到调试全解析

    Renesas E1/E20 仿真器使用指南:从规格到调试全解析 电子工程师的日常工作中,仿真器调试和开发微控制
    的头像 发表于 03-31 15:30 182次阅读

    Renesas E1/E20 仿真器使用指南:从入门到精通

    Renesas E1/E20 仿真器使用指南:从入门到精通 嵌入式系统开发的领域中,仿真器调试和验证 MCU(微控制单元)
    的头像 发表于 03-15 17:20 1045次阅读

    Renesas E1/E20 仿真器使用指南:从基础到实战

    Renesas E1/E20 仿真器使用指南:从基础到实战 嵌入式开发领域,一款高效可靠的仿真器对于调试程序、优化性能至关重要。Renesas 的 E1/E20
    的头像 发表于 03-02 15:10 367次阅读

    Renesas E1/E20 仿真器:设计与调试的全方位指南

    Renesas E1/E20 仿真器:设计与调试的全方位指南 电子设计领域,仿真器调试和验证微控制
    的头像 发表于 02-28 15:45 313次阅读

    瑞萨E1/E20仿真器:设计、调试与使用全解析

    瑞萨E1/E20仿真器:设计、调试与使用全解析 嵌入式系统开发中,仿真器是不可或缺的工具,它能帮助工程师高效地进行硬件调试
    的头像 发表于 02-11 17:05 863次阅读

    Renesas E1/E20 仿真器:设计与调试全解析

    Renesas E1/E20 仿真器:设计与调试全解析 嵌入式系统开发的广阔领域中,仿真器扮演着至关重要的角色,它是工程师们调试和优化代码
    的头像 发表于 02-09 10:30 756次阅读

    关于CW32 互补PWM 程序调试的疑问求解

    调试CW32 输出互补PWM 的程序时,发现在线调试时波形输出正常,但是当把程序在下到CW32
    发表于 12-08 07:02

    单片机系统硬件的调试方法

    损坏集成块,加电之后.对各个插件上引脚的电位进行检查.检查VCC和GND的电位.一般情况下电位为5-4.8V。如果属于高压通电,则要调试联机仿真器.经检查
    发表于 12-03 06:10

    如何使用CMSIS DAP仿真器调试,通过NucleiStudio调试蜂鸟SOC

    如标题所示,我们分享如何使用CMSIS DAP仿真器调试,通过NucleiStudio调试蜂鸟SOC 我们先介绍一下CMSIS DAP仿真器: 他的功能如下: 可以看到,它支持JT
    发表于 10-21 12:05

    如何在 IAR Embedded Workbench for ARM 开发环境中启用可配置数据闪存并设置大小?

    如何在 IAR Embedded Workbench for ARM 开发环境中启用可配置数据闪存并设置大小?
    发表于 08-26 07:49

    请问如何在 IAR Embedded Workbench for ARM 开发环境中启用可配置数据闪存并设置大小?

    如何在 IAR Embedded Workbench for ARM 开发环境中启用可配置数据闪存并设置大小?
    发表于 08-20 06:23

    「芯生态」杰发科技AC7870携手IAR开发工具链,助推汽车电子全栈全域智能化落地

    IAR Embedded Workbench for Arm已全面支持杰发科技AutoChips车规级MCU AC7870,为其提供涵盖开发、调试、优化等一站式服务
    的头像 发表于 07-22 12:06 812次阅读
    「芯生态」杰发科技AC7870携手<b class='flag-5'>IAR</b>开发工具链,助推汽车电子全栈全域智能化落地

    第三章 仿真器介绍

    本篇文章我们介绍了W55MH32板载的WIZ-Link仿真器的使用方法,让我们一起插上USB线开始下载、调试程序吧!
    的头像 发表于 05-21 11:54 1079次阅读
    第三章 <b class='flag-5'>仿真器</b>介绍

    基于 IAR Embedded Workbench 的自研 MCU 芯片软件函数与变量内存布局优化精控方法

    嵌入式软件开发领域,MCU芯片软件的架构设计与内存布局的精细规划对系统性能和稳定性起着关键作用。本文档聚焦于IAR Embedded Workbench环境下,为自研MCU芯片软件提
    的头像 发表于 04-30 16:38 870次阅读
    基于 <b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b> 的自研 MCU 芯片软件函数与变量内存布局优化精控方法