stm32判断程序是否在仿真下面运行

出于调试的目的,在仿真的时候经常要改变程序的逻辑以方便测试,不幸的是,我是一个不甚严谨的人,每次测试完,一些改动忘记改回去就发布了,经常被测试退回。
于是,我想到是否能利用stm32中的特殊寄存器判断是否在调试状态,如果是,引入我需要测试的部分,否则自动跳过,这样发布就不会出现发布调试版本的问题。有人会说,测试用debug,发布使用release,我比较懒,不想切来切去。
查阅cortex M3 手册可以找到几个debug bit,运行测试发现在调试和离线状态下均不会发生变化。
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;

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

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

debug

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值