你好
当发生看门狗重置时,我尝试核心转储[系统转储]]。启动系统时加载转储数据。请给出任何提示或方法或示例代码谢谢
嗨jakehan,
当发生NMI时,SDK将在存储器位置中保存68x寄存器的快照,该内存位置仅用于该目的(在NMI的情况下,状态库为0x7FC5600),这意味着当系统重新启动时区域将填充寄存器值,该值导致NMI为您读取和存储或处理。因此,您不在开发模式中,您希望将数据存储在闪存中,例如,您可以将这些数据从那些特定的内存位置推到闪存。
谢谢mt_dialog.
你的意思是,我必须将寄存器设置如下?watchdog_ctrl_reg.nmi_rst = 0x00.watchdog_ctrl.wdog_val = 0x00.==我找到了DA14681-01_2V3.pdf ===中的描述[表657:寄存器地图WDOG]
如果watchdog_ctrl_reg [nmi_rst] = 0那么如果wdog_val = 0 - > nmi(不可屏蔽中断)
===================================================================.我还在项目中找到了商店代码。这是你提到的吗?
__retained_code void hw_watchdog_handle_int(无符号长*异常_args){:if(异常_args!= null){*(valaTile unsigned long *)(status_base)=异常_args [0];// r0.*(varatile unsigned long *)(status_base + 0x04)= Exception_args [1];// r1.*(valaTile unsigned long *)(status_base + 0x08)= Exception_args [2];// r2.*(valaTile unsigned long *)(status_base + 0x0c)=例外[3];// r3.:*(valaTile unsigned long *)(status_base + 0x30)=(*((varatile unsigned long *)(0xe000ed3c)))));// AFSR.*(volatile unsigned long *)(status_base + 0x34)=(*((volatile unsigned long *)(0xe000ed34))));// mmar.*(valatile unsigned long *)(status_base + 0x38)=(*((valatile unsigned long *)(0xe000ed38)))));// bfar.}
}
是的,这就是我的重点,而且你不必通过使用dg_configuse_wdog启用了看门狗,然后当看门狗发出中断而nmi执行的处理程序,那么否则就会执行任何内容,那么否则就会逐步执行手臂将存储在我提到的状态_Base中。
谢谢您的回答。我想要实施的是似乎是启动。启动后,我想在看门狗重置之前重新启动点。[堆栈推送当看门狗发生时,重置后堆叠弹出。]是否可以?
您所提到的是可能的,并且非常棘手(我无法给出关于如何执行此操作的具体说明,因为此类方案未实现,此外,由于您必须必须保存除了ARM寄存器之外,因此主堆栈,每个任务的堆栈,以重新启动后重新申请,那些我可以想到的一些事情)。但我没有看到这样的原因。例如,假设设备发生何处命中,因为看门狗发生,这意味着代码卡在特定指令中,并且系统变得无响应(尝试访问外围设备,并且没有响应等)。NMI命中且您保存了ARM的状态,您假设RAM是正常的,因为它没有下来,并且在启动时,您将重新涂上ARM寄存器,则设备将继续从它的部分继续卡住,另一秒钟将发生另一个NMI。所以,我没有看到一个实现这样的东西的原因,如果你因看门狗阻止从NMI重置并继续执行代码,我的意思是它相同。
嗨jakehan,
当发生NMI时,SDK将在存储器位置中保存68x寄存器的快照,该内存位置仅用于该目的(在NMI的情况下,状态库为0x7FC5600),这意味着当系统重新启动时区域将填充寄存器值,该值导致NMI为您读取和存储或处理。因此,您不在开发模式中,您希望将数据存储在闪存中,例如,您可以将这些数据从那些特定的内存位置推到闪存。
谢谢mt_dialog.
你的意思是,我必须将寄存器设置如下?
watchdog_ctrl_reg.nmi_rst = 0x00.
watchdog_ctrl.wdog_val = 0x00.
==我找到了DA14681-01_2V3.pdf ===中的描述[表657:寄存器地图WDOG]
如果watchdog_ctrl_reg [nmi_rst] = 0那么
如果wdog_val = 0 - > nmi(不可屏蔽中断)
===================================================================.
我还在项目中找到了商店代码。这是你提到的吗?
__retained_code void hw_watchdog_handle_int(无符号长*异常_args)
{
:
if(异常_args!= null){
*(valaTile unsigned long *)(status_base)=异常_args [0];// r0.
*(varatile unsigned long *)(status_base + 0x04)= Exception_args [1];// r1.
*(valaTile unsigned long *)(status_base + 0x08)= Exception_args [2];// r2.
*(valaTile unsigned long *)(status_base + 0x0c)=例外[3];// r3.
:
*(valaTile unsigned long *)(status_base + 0x30)=(*((varatile unsigned long *)(0xe000ed3c)))));// AFSR.
*(volatile unsigned long *)(status_base + 0x34)=(*((volatile unsigned long *)(0xe000ed34))));// mmar.
*(valatile unsigned long *)(status_base + 0x38)=(*((valatile unsigned long *)(0xe000ed38)))));// bfar.
}
}
嗨jakehan,
是的,这就是我的重点,而且你不必通过使用dg_configuse_wdog启用了看门狗,然后当看门狗发出中断而nmi执行的处理程序,那么否则就会执行任何内容,那么否则就会逐步执行手臂将存储在我提到的状态_Base中。
谢谢mt_dialog.
谢谢您的回答。
我想要实施的是似乎是启动。
启动后,我想在看门狗重置之前重新启动点。
[堆栈推送当看门狗发生时,重置后堆叠弹出。]
是否可以?
嗨jakehan,
您所提到的是可能的,并且非常棘手(我无法给出关于如何执行此操作的具体说明,因为此类方案未实现,此外,由于您必须必须保存除了ARM寄存器之外,因此主堆栈,每个任务的堆栈,以重新启动后重新申请,那些我可以想到的一些事情)。但我没有看到这样的原因。例如,假设设备发生何处命中,因为看门狗发生,这意味着代码卡在特定指令中,并且系统变得无响应(尝试访问外围设备,并且没有响应等)。NMI命中且您保存了ARM的状态,您假设RAM是正常的,因为它没有下来,并且在启动时,您将重新涂上ARM寄存器,则设备将继续从它的部分继续卡住,另一秒钟将发生另一个NMI。所以,我没有看到一个实现这样的东西的原因,如果你因看门狗阻止从NMI重置并继续执行代码,我的意思是它相同。
谢谢mt_dialog.