如何保存当前堆栈并加载已保存的堆栈

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
杰哈恩
离线
最后一次露面:3年3个月前
加入:2017-07-20 04:11
如何保存当前堆栈并加载已保存的堆栈

你好

当发生看门狗重置时,我尝试核心转储[系统转储]]。
启动系统时加载转储数据。
请给出任何提示或方法或示例代码
谢谢

设备:
mt_dialog.
离线
最后一次露面:4个月2周前
职员
加入:2015-06-08 11:34
嗨jakehan,

嗨jakehan,

当发生NMI时,SDK将在存储器位置中保存68x寄存器的快照,该内存位置仅用于该目的(在NMI的情况下,状态库为0x7FC5600),这意味着当系统重新启动时区域将填充寄存器值,该值导致NMI为您读取和存储或处理。因此,您不在开发模式中,您希望将数据存储在闪存中,例如,您可以将这些数据从那些特定的内存位置推到闪存。

谢谢mt_dialog.

杰哈恩
离线
最后一次露面:3年3个月前
加入:2017-07-20 04:11
你的意思是,我必须设置

你的意思是,我必须将寄存器设置如下?
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.
}

}

mt_dialog.
离线
最后一次露面:4个月2周前
职员
加入:2015-06-08 11:34
嗨jakehan,

嗨jakehan,

是的,这就是我的重点,而且你不必通过使用dg_configuse_wdog启用了看门狗,然后当看门狗发出中断而nmi执行的处理程序,那么否则就会执行任何内容,那么否则就会逐步执行手臂将存储在我提到的状态_Base中。

谢谢mt_dialog.

杰哈恩
离线
最后一次露面:3年3个月前
加入:2017-07-20 04:11
谢谢您的回答。

谢谢您的回答。
我想要实施的是似乎是启动。
启动后,我想在看门狗重置之前重新启动点。
[堆栈推送当看门狗发生时,重置后堆叠弹出。]
是否可以?

mt_dialog.
离线
最后一次露面:4个月2周前
职员
加入:2015-06-08 11:34
嗨jakehan,

嗨jakehan,

您所提到的是可能的,并且非常棘手(我无法给出关于如何执行此操作的具体说明,因为此类方案未实现,此外,由于您必须必须保存除了ARM寄存器之外,因此主堆栈,每个任务的堆栈,以重新启动后重新申请,那些我可以想到的一些事情)。但我没有看到这样的原因。例如,假设设备发生何处命中,因为看门狗发生,这意味着代码卡在特定指令中,并且系统变得无响应(尝试访问外围设备,并且没有响应等)。NMI命中且您保存了ARM的状态,您假设RAM是正常的,因为它没有下来,并且在启动时,您将重新涂上ARM寄存器,则设备将继续从它的部分继续卡住,另一秒钟将发生另一个NMI。所以,我没有看到一个实现这样的东西的原因,如果你因看门狗阻止从NMI重置并继续执行代码,我的意思是它相同。

谢谢mt_dialog.