您的位置:首页 > 其它

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 查到了其定义

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;


之前已经查到了这个结构体,但只对前面两个寄存器进行检测,难道饶了一个大圈,原来答案已经摆在面前

赶紧检验了一下,验证是对,果然是马虎害死人,简单的小问题。大胆猜测,细心求证啊

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: