大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致

  本篇是 《IAR EWARM复位类型》《MCUXpresso IDE复位类型》的同系列篇,三大经典IDE(IAR EWARM、Keil MDK、MCUXpresso IDE)下的复位策略只剩 Keil MDK 没介绍了,心事不了,觉睡不好。今天痞子衡就来认真讲一下搞嵌入式生涯里最早接触的 IDE - Keil,完结这个系列。

  • Note: 痞子衡测试的Keil MDK版本是v5.31。

一、Keil调试机制与调试分类

  关于 Keil MDK 下的调试机制原理在 \Keil_v5\ARM\Hlp 目录下没有找到专门的设计性文档,IDE 帮助手册 uv4.chm 里 Debugging 章节更多是介绍如何在 IDE 里使用下载调试功能。

  不过调试机制在各 IDE 上大同小异,设计理念都是一致的,这部分建议参考 《IAR EWARM复位类型》 里的一、二章节。

二、复位类型全解析

  好了,现在我们进入正题,开始介绍 Keil 下复位类型。我们知道不同硬件仿真器下复位功能有差异,痞子衡主要介绍 i.MXRT 上两种最常用的仿真器:J-Link 和 DAPLink。此外不管是哪种仿真器,其都借助了 Cortex-M7 内核功能,内核在 SCB 模块的 AIRCR 寄存器中集成了复位的支持,详见 《IAR EWARM复位类型》3.1 Cortex-M7复位功能 小节。

2.1 J-Link复位类型

  Keil 里关于 J-Link 连接(Connect)和复位(Reset)是两级设置,先连接后复位,并且复位动作仅在勾选了"Reset after Connect"之后才有效。实际使用中推荐 Connect 选项固定设为"Normal",且勾选上"Reset after Connect",然后在 Reset 选项里指定想要的复位类型。

Note: 详细介绍可以查看 \Keil_v5\ARM\Hlp\jlink.chm 文档中 Debug 小节

  连接类型选项:

  • Normal:默认的连接策略,连接后只是将 PC 停在当前执行的指令处
  • with Pre–reset:在连接前,先执行一次 HW RESET
  • under Reset:在连接过程中一直保持 HW RESET 有效(该选项适用于用户程序误将 JTAG/SWD 禁掉的情况)

  复位类型选项:

  • Normal(复位编号0):默认的复位策略,对于i.MXRT来说等同于Core and peripherals方式
  • Core(复位编号1):借助Cortex-M内核模块SCB中的AIRCR寄存器的VECTRESET位功能来复位Core
  • Reset Pin(复位编号2):通过拉低J-Link的RESET引脚(一般也会接到MCU reset脚)来复位MCU
  • Core and peripherals(复位编号8):借助Cortex-M内核模块SCB中的AIRCR寄存器的VECTRESET位和SYSRESETREQ位来同时复位Core和MCU外设模块

  剩下几种复位类型不适用i.MXRT,暂不介绍。

2.2 DAPLink复位类型

  Keil 里关于 DAP-Link 连接(Connect)和复位(Reset)也是两级设置,先连接后复位,并且复位动作仅在勾选了"Reset after Connect"之后才有效。实际使用中推荐 Connect 选项固定设为"Normal",且勾选上"Reset after Connect",然后在 Reset 选项里指定想要的复位类型。此外相比 J-Link 还多一个 "Stop after Reset "选项,这个选项用于永久使能应用程序复位向量的捕获,我们一般不勾选。

Note: 详细介绍可以查看 \Keil_v5\ARM\Hlp\dapdebug.chm 文档中 Debug 小节

  连接类型选项:

  • Normal:默认的连接策略,连接后只是将 PC 停在当前执行的指令处
  • with Pre–reset:在连接前,先执行一次 HW RESET
  • under Reset:在连接过程中一直保持 HW RESET 有效(该选项适用于用户程序误将 JTAG/SWD 禁掉的情况)
  • without Stop:连接后任 CPU 自由执行(适用于观测存储器或者外设 SFR 情况)

  复位类型选项:

  • HW RESET:通过翻转DAPLink的nSRST/nRESET引脚(一般也会接到MCU reset脚)来复位MCU
  • SYSRESETREQ:借助Cortex-M内核模块SCB中的AIRCR寄存器的SYSRESETREQ位来同时复位MCU外设模块
  • VECTRESET:借助Cortex-M内核模块SCB中的AIRCR寄存器的VECTRESET位功能来复位Core

三、复位类型对在线调试的影响

  复位类型对在线调试的影响分两种:一、是否影响应用程序正常调试;二、是否影响应用程序正常运行。对于第二点,因为应用程序的设计差异,无法确定复位类型的不同导致的未复位模块对其产生何种影响,因此我们暂不讨论这点,我们主要看第一点。

  设置不同的复位类型是否影响应用程序正常调试(能否停在程序入口函数,能否进行单步)?痞子衡在MIMXRT1050-EVKB上实测了SDK里的led_blinky例程,选取了flexspi_nor_debug(在Flash)build做了很多组测试,结果如下:

例程Build 仿真器 复位类型 BootMode 调试现象
debug J-Link

DAPLink
所有的(除了DAPLink下HW RESET) 2'b01 - SDP

2'b10 - Flash Boot
正常下载与调试
flexspi_nor_debug J-Link - Core 2'b01 - SDP

2'b10 - Flash Boot
正常下载与调试
flexspi_nor_debug J-Link - Normal

- Core and peripherals
2'b01 - SDP 关闭校验后可正常下载,但无法调试
flexspi_nor_debug J-Link - Normal

- Core and peripherals
2'b10 - Flash Boot 关闭校验后可正常下载,能正常调试
flexspi_nor_debug J-Link - Reset Pin 2'b01 - SDP 正常下载,但无法调试
flexspi_nor_debug J-Link - Reset Pin 2'b10 - Flash Boot 正常下载与调试
flexspi_nor_debug DAPLink - VECTRESET 2'b01 - SDP

2'b10 - Flash Boot
正常下载与调试
flexspi_nor_debug DAPLink - SYSRESETREQ 2'b01 - SDP 关闭校验后可正常下载,但无法调试
flexspi_nor_debug DAPLink - SYSRESETREQ 2'b10 - Flash Boot 正常下载与调试
flexspi_nor_debug DAPLink - HW RESET 2'b01 - SDP

2'b10 - Flash Boot
无法下载,报错无法停止CPU

  从上表的测试结果,我们可以得到如下结论:

  • 结论1:在Flash调试,要想正常调试,要么不复位片上外设(保留Flashloader对FlexSPI等模块的初始化),要么启动模式设成Flash Boot(让BootROM完成FlexSPI等模块的初始化),因为Clock/GPIO/FlexSPI的初始化必须保留,CPU才能正常获得Flash里指令。
  • 结论2:JLink复位下,Keil MDK调试体验与其他IDE是一致的。
  • 结论3:DAPLink复位下,Keil MDK下HW RESET方式复位可能会报奇怪的内核连接错误。

  至此,Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致现象痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link/DAPLink)的更多相关文章

  1. 痞子衡嵌入式:IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link / CMSIS-DAP)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 做Cortex-M内核MCU嵌入式软件开发,可用的集成开发环境( ...

  2. 痞子衡嵌入式:超级下载算法RT-UFL v1.0发布,附J-Link下安装教程

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> 历时 8 个月终于迎来了 v1.0 版发布,因为是第一个正式版,为了保证质 ...

  3. 痞子衡嵌入式:IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞问题的分析解决经验. 事情缘起恩智浦官方论坛上的一 ...

  4. 痞子衡嵌入式:对比MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异. 近期有 i.MXRT 客户在集成 OTA SBL ...

  5. 痞子衡嵌入式:16MB以上NOR Flash使用不当可能会造成软复位后i.MXRT无法正常启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT上使用16MB以上NOR Flash软复位无法正常启动问题的分析解决经验. 痞子衡这几天在支持一个i.MXRT1050客户项 ...

  6. 痞子衡嵌入式:可通过USB Device Path来唯一指定i.MXRT设备进行ROM/Flashloader通信

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是通过USB Device Path来唯一指定i.MXRT设备进行ROM/Flashloader通信. i.MXRT系列高性能微控制器从2 ...

  7. 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...

  8. 痞子衡嵌入式:超级下载算法RT-UFL v1.0在恩智浦MCUXpresso IDE下的使用

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...

  9. 痞子衡嵌入式:MCUXpresso IDE下在线调试时使用不同复位策略的现象总结

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下在线调试时使用不同复位策略的现象总结. 本篇实际上是<IAR在线调试时设不同复位类型可能会导致i.M ...

随机推荐

  1. 结对项目:求交点pro

    [2020 BUAA 软件工程]结对项目作业 项目 内容 课程:北航2020春软件工程 博客园班级博客 作业:阅读并撰写博客回答问题 结对项目作业 我在这个课程的目标是 积累两人结对编程过程中的经验 ...

  2. 《Ray Tracing in One Weekend》阅读笔记 - 9、Metal(金属)

    如果我们希望不同的物体使用不同的材料,则需要进行设计决策.我们可以使用具有许多参数的通用材料,而将不同的材料类型仅将其中一些参数归零.这不是一个坏方法.或者我们可以有一个抽象的材料类来封装行为.我是后 ...

  3. golang:面向对象总结

    所谓的面向对象其实就是找一个专门做这个事的人来做,不用关心具体怎么实现的.所以说,面向过程强调的是过程,步骤.而面向对象强调的是对象,也就是干事的人. Go语言:面向对象语言特性 方法 嵌入 接口 没 ...

  4. [BD] Hive

    简介 基于HDFS的数据仓库工具 基于HDFS上的数据分析引擎 2.x 前:SQL -----> Hive  ----> MapReduce 2.x 后:推荐执行引擎为 Spark 支持S ...

  5. Win10开启移动热点

    Win10开启移动热点 禁用 无线网卡 启动 无线网卡

  6. 编译安装rsyslog

    安装gcc-c++ 615 yum -y install gcc c++ 616 yum -y install gcc-c++ 安装libestr.libee wget http://libestr. ...

  7. spec2006与spec2000的对比简要说明

    ec2006使用说明  2014-10-10 五 性能测试  benchmark 一.工具介绍 SPEC CPU 2006 benchmark是SPEC新一代的行业标准化的CPU测试基准套件.重点测试 ...

  8. 联想 lenove 3750 M4服务器更改启动项和管理口IP

    联想 lenove 3750 M4服务器更改启动项和管理口IP 注: 因为在机房拍照的原因,再加上工作比较忙:整理成文档的时候有的过程已经忘记了,所以有的步骤可能会缺失,里面的选项都已经用中文方式表达 ...

  9. 使用 parted 命令可以查看系统采用什么类型的分区表 gpt/mbr/msdos/ext/ext/ext2/ext3/ext4

      Linux磁盘表示方式 Linux以字母标识磁盘的个数 a:第一块 b:第二块 Linux用数字标识分区:1-4标识主分区或扩展分区 逻辑分区从5开始 例如:sda.sda1.sda2 低级格式化 ...

  10. OpenStack Rally 性能测试

    注意点:在测试nova,在配置文件里面如果不指定网络id,那么默认是外网的网络(该网络是共享的),如果想要指定网络,那么该网络必须是共享的状态,否则将会报错:无法发现网络.如果测试多于50台的虚拟机需 ...