如何使用Keil内部的看门狗检查代码的正确操作。
我可以通过NMI处理程序来处理所有的事情,但是当它到达例程的末尾时,它会执行软件重置
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG) & ~REMAP_ADR0) | SW_RESET);
然后报告说无法启动核心。我假设软件重置已经发生,但我没有办法获得控制回来,而不断开开发板。
如果我尝试在调试器之外运行程序(通过在它到达这一点之前停止调试器),它仍然不能正确重置。
因此,我如何运行我的程序与WDOG启用重置设备,并检查其工作正常,而不烧OTP。是可能的吗?
我用beacon3。40.6作为基础。
它直接使用WDOG强制设备重置吗?
设备:
当看门狗触发时,它最终到达NMI处理程序例程中的以下行(Beacon3.40.6)
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG) & ~REMAP_ADR0) | SW_RESET);
这是重置系统的指令。执行此代码后,不会发生任何事情。
~REMAP_ADR0到底是什么意思?在数据表中有4个可能的值-默认值是00 (ROM),这意味着它将从ROM中的位置0开始执行。
我有限的理解告诉我应该从系统RAM中重新启动,因为我的程序驻留在这里(假设我没有失去电源或进入深度睡眠模式)。
有人能确认我需要改变REMAP_ADR0从它的默认设置,我什么时候不需要这样做?
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG) & ~REMAP_ADR0) | SW_RESET);
因此,这一行的目的是有效地使与REMAP_ADR0对应的位为零,即强制使用默认值。
如果我把线路换成
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG)) | SW_RESET);
并在此调用之前使REMAP_ADR0 =0x02 (SysRAM),然后看门狗定时器过期导致“正确的”复位,代码重新开始运行。
我还可以设置断点的工作,所以一切似乎都很好!
我还是不确定当我和看门狗去OTP时会发生什么。默认设置是否适合该场景?
嗨DrNick1,
是的,正确的REMAP_ADR0是为了确保REMAP_ADR0被设置为默认地址。默认设置应该强制引导加载程序运行,并最终从OTP读取数据。
由于MT_dialog
你好。
我尝试使用sdk_driver看门狗API来初始化看门狗。
1.我已经启用了看门狗
/ / # undef CFG_WDOG
2.我试过了
wdg_init (1)
和wdg_init (0)
我的软件似乎没有重新启动,即使我没有重置看门狗:
1.它不会再点亮LED(我有一个LED闪烁启动)
2.我的Keil IDE调试会话没有命中NMI_HandlerC
添加代码来测试看门狗计数器,表示它卡在0x00FF
嗨kobyfr_mag,
您是否模拟了最终会使软件崩溃并触发看门狗(例如,意味着陷入无尽的循环中)的情况?你在睡眠模式时使用看门狗,看门狗重置每次你从睡眠中醒来。你不需要显式地启用它,只需定义它,SDK会负责初始化。除此之外,当处于睡眠模式时,看门狗会在每次唤醒时重新加载main_func()函数底部的arch_main.c文件,你可以注释掉下面的代码片段并测试它:
如果(USE_WDOG)
wdg_reload (WATCHDOG_DEFAULT_PERIOD);
由于MT_dialog
1.是的,我在试着让一只看门狗开火,以测试它是否可行。我不知道我是否做了所有需要激活它。
2.我注释掉了arch_main.c
wdg_reload (WATCHDOG_DEFAULT_PERIOD)
3.我的init序列是3个快速LED闪烁。(总持续时间600 mSec)
4.我的无尽循环是缓慢的LED闪烁(应该会导致看门狗在~2秒后着火)
5.我从uVision加载我的程序到RAM,通过JLink调试器。
6.我让它自由奔跑
7.我观察了快速LED闪烁序列一次,然后慢速LED闪烁序列不间断。==> no SW reset ==> no watchdog occurred
我还需要做什么才能让看门狗开火,复位吗?
嗨kobyfr_mag,
我刚刚注意到第5篇文章,你把看门狗的定义注释掉了吗?尝试#define CFG_WDG不要注释出来,如果你注释出来SDK将不会启用它。
请尝试禁用睡眠模式,并留下wdg_reload(WATCHDOG_DEFAULT_PERIOD)注释,在一个新的模板中使用keil环境运行它。如果您这样做,您的代码将转到NMI_Handler()。
由于MT_dialog
谢谢你!
添加
#定义CGF_WDOG
起了作用。由于
而(1)
我插入,我点NMI_Handler看门狗会每2。5秒发射一次。嗨chen123,
谢谢你的评论。这个论坛的帖子很旧,也很封闭,所以你能再发一个新的吗?
谢谢,PM_Dialog