stm32判断程序是否在仿真下面运行
2015-11-07 23:00
246 查看
出于调试的目的,在仿真的时候经常要改变程序的逻辑以方便测试,不幸的是,我是一个不甚严谨的人,每次测试完,一些改动忘记改回去就发布了,经常被测试退回。
于是,我想到是否能利用stm32中的特殊寄存器判断是否在调试状态,如果是,引入我需要测试的部分,否则自动跳过,这样发布就不会出现发布调试版本的问题。有人会说,测试用debug,发布使用release,我比较懒,不想切来切去。
查阅cortex M3 手册可以找到几个debug bit,运行测试发现在调试和离线状态下均不会发生变化。
还有如 SHCSR 中的MONITORACT BIT
手册解释为 Debug monitor active bit, reads as 1 if Debug monitor is active,似乎已经完美符合要求,在仿真中检测始终为0
百度了半天,没看到我这样的需求,不会吧
没办法,暂时使用macro file吧,在宏里面设置一个标志,表明为仿真启动,先用起来再说吧,有时间再研究。
execUserSetup()
{
__message “execUserSetup() called.\n”;
__writeMemory32(0xAAAAAAAA, 0x20004FF0, “Memory”);
__message “Write 0xAAAAAAAA Ok!!!\n”;
}
有人会问,直接设置一个变量改一下不是解了,没错,问题是每次弄一下,我觉得折腾。
后续:
第二天,不甘心又重新开始调试,突然想到是不是可以从Jlink里面找些线索,果然在Data Log里面查到,Jlink启动调试后,对 0xE000EDFC的读写。
从cortext m3 查到了其定义
之前已经查到了这个结构体,但只对前面两个寄存器进行检测,难道饶了一个大圈,原来答案已经摆在面前
赶紧检验了一下,验证是对,果然是马虎害死人,简单的小问题。大胆猜测,细心求证啊
于是,我想到是否能利用stm32中的特殊寄存器判断是否在调试状态,如果是,引入我需要测试的部分,否则自动跳过,这样发布就不会出现发布调试版本的问题。有人会说,测试用debug,发布使用release,我比较懒,不想切来切去。
查阅cortex M3 手册可以找到几个debug bit,运行测试发现在调试和离线状态下均不会发生变化。
还有如 SHCSR 中的MONITORACT BIT
手册解释为 Debug monitor active bit, reads as 1 if Debug monitor is active,似乎已经完美符合要求,在仿真中检测始终为0
百度了半天,没看到我这样的需求,不会吧
没办法,暂时使用macro file吧,在宏里面设置一个标志,表明为仿真启动,先用起来再说吧,有时间再研究。
execUserSetup()
{
__message “execUserSetup() called.\n”;
__writeMemory32(0xAAAAAAAA, 0x20004FF0, “Memory”);
__message “Write 0xAAAAAAAA Ok!!!\n”;
}
有人会问,直接设置一个变量改一下不是解了,没错,问题是每次弄一下,我觉得折腾。
后续:
第二天,不甘心又重新开始调试,突然想到是不是可以从Jlink里面找些线索,果然在Data Log里面查到,Jlink启动调试后,对 0xE000EDFC的读写。
从cortext m3 查到了其定义
typedef struct { u32 DHCSR; /*!< Offset: 0x00 Debug Halting Control and Status Register */ u32 DCRSR; /*!< Offset: 0x04 Debug Core Register Selector Register */ u32 DCRDR; /*!< Offset: 0x08 Debug Core Register Data Register */ u32 DEMCR; /*!< Offset: 0x0C Debug Exception and Monitor Control Register */ } CoreDebug_Type;
之前已经查到了这个结构体,但只对前面两个寄存器进行检测,难道饶了一个大圈,原来答案已经摆在面前
赶紧检验了一下,验证是对,果然是马虎害死人,简单的小问题。大胆猜测,细心求证啊
相关文章推荐
- iotop详解
- python之函数用法capitalize()
- iOS开发系列--地图与定位
- shell正则表达式(zhuan)
- 提升工作效率的三种方法
- 大数的阶乘
- shell正则表达式(zhuan)
- 连接池中的maxIdle,MaxActive,maxWait参数
- jQuery的DOM操作(四)
- [iOS开发项目-11] 英雄列表
- (spring-第1回【IoC基础篇】)Spring容器中Bean的生命周期
- github 上传和下载代码
- 算法游戏
- 编码
- iOS__推送通知
- iOS中BOOL和bool的区别
- iOS中类和对象还有,nil/Nil/NULL的区别
- shuoj 1659 跳马问题
- 动手实验:继承条件下的构造方法调用
- linux下用户账户切换