41#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
管理员RoboMaster赛务
 楼主| 2020-4-10 20:13:05 只看该作者
回归正题,@Elecheart 那还有同学遇到这样的问题是:找到问题的发生位置,但是并不清楚问题的原因,还可以怎么做呢?
42#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
梯队队员greatbenz
2020-4-10 20:13:09 只看该作者
学习学习111
43#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
梯队队员Elecheart
2020-4-10 20:14:17 只看该作者
我们可以通过查看系统控制块SCB中相关错误寄存器来判断,在Keil的调试模式中打开View -> System Viewer -> Core Peripherals -> Fault Reports查看。比如对指向超出RAM区域的指针进行操作,发现进入HardFault_Handler,这时发现总线错误状态寄存器BRSR中的BFARVALID位被置位,表示访问了一个无效的总线地址。在CM4的SCB中还有像CFSR、HFSR、BFAR、MMFAR这样的错误寄存器。作为扩展,大家可以阅读内核用户手册《Cortex-M4 Devices Generic User Guide》或《Cortex-M3 Devices Generic User Guide》中4.3 System control block章节。
44#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
管理员RoboMaster赛务
 楼主| 2020-4-10 20:15:06 只看该作者
(新的知识增加了)
45#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
管理员RoboMaster赛务
 楼主| 2020-4-10 20:16:01 只看该作者
@Elecheart 那MCU在给别人测试时出现很难复现问题,怎么在不复位的情况下接入调试工具进行调试?
46#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
梯队队员Elecheart
2020-4-10 20:17:02 只看该作者
这种情况时很常见的,在实际测试时出现了问题,这时候却往往不在调试模式下,而接入调试器进行调试会进行复位,原来的问题现场就被破坏了。这时我们就需要使用Attch的调试方法进行调试,这种方法不会对MCU进行复位。在Keil中的操作方法给大家推荐一篇Keil的官方文档进行阅读:http://www.keil.com/support/docs/3697.htm
47#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
管理员RoboMaster赛务
 楼主| 2020-4-10 20:17:53 只看该作者
get√
回复

使用道具 举报

48#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
管理员RoboMaster赛务
 楼主| 2020-4-10 20:18:45 只看该作者
@Elecheart 那还有经常在调试过程中,发现变量的值会被莫名奇妙的改变,该怎么寻找问题呢?
49#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
梯队队员Elecheart
2020-4-10 20:19:28 只看该作者
这种情况一般是访问越界导致的,我们可以用访问断点来定位是在哪里被修改的。在变量的内存地址处定义访问写断点,这样在程序写入这个变量时就会停下程序供我们分析。
50#

[官方动态] 【RM2020 圆桌】第七期 嵌入式调试技巧分享

[复制链接]
管理员RoboMaster赛务
 楼主| 2020-4-10 20:20:51 只看该作者
@Elecheart 还收到一些同学反馈说,不想使用Keil全家桶,代码是使用C Make构建系统,该怎么进行调试呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

触屏版 | 电脑版

Copyright © 2024 RoboMasters 版权所有 备案号 粤ICP备2022092332号

快速回复 返回顶部 返回列表