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

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
6个职位/0个新职位
最后一篇文章
杰克汉
离线
最后一次见到:3年2个月前
已加入:2017-07-20 04:11
如何保存当前堆栈并加载保存的堆栈

您好!

当看门狗复位时,我正在尝试核心转储[SYSTEM DUMP]]。
并在启动系统时加载转储数据。
请给出任何提示、方法或示例代码
谢谢你

设备:
MT\u对话框
离线
最后一次见到:3个月4天前
工作人员
已加入:2015-06-08 11:34
你好,杰克汉,

你好,杰克汉,

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

谢谢你的对话

杰克汉
离线
最后一次见到:3年2个月前
已加入:2017-07-20 04:11
你是说,我必须

你的意思是,我必须把寄存器设置如下?
看门狗\u CTRL \u REG.NMI \u RST=0x00
看门狗\u CTRL.WDOG \u VAL=0x00
==我在DA14681-01_2v3.pdf中找到了描述[表657:寄存器映射WDOG]===

如果看门狗\u CTRL \u REG[NMI \u RST]=0,则
如果WDOG_VAL=0->NMI(不可屏蔽中断)

===================================================================
我还在项目中找到了商店代码。你是这么说的吗?

__保留代码void hw\u watchdog\u handle\u int(无符号长*异常参数)
{
:
如果(异常参数!=(空){
*(volatile unsigned long*)(STATUS_BASE)=异常_args[0];//R0级
*(volatile unsigned long*)(STATUS_BASE+0x04)=异常_args[1];//R1级
*(volatile unsigned long*)(STATUS_BASE+0x08)=异常_args[2];//R2级
*(volatile unsigned long*)(STATUS_BASE+0x0C)=异常_args[3];//R3级
:
*(volatile unsigned long*)(STATUS_BASE+0x30)=(*((volatile unsigned long*)(0xE000ED3C)));//AFSR公司
*(volatile unsigned long*)(STATUS_BASE+0x34)=(*((volatile unsigned long*)(0xE000ED34));//马尔
*(volatile unsigned long*)(STATUS_BASE+0x38)=(*((volatile unsigned long*)(0xE000ED38));//博法尔
}

}

MT\u对话框
离线
最后一次见到:3个月4天前
工作人员
已加入:2015-06-08 11:34
你好,杰克汉,

你好,杰克汉,

是的,这就是我所指的,你不必做任何明确的事情,如果你已经启用了看门狗使用dg\u configUSE\u WDOG,那么当看门狗发出一个中断和NMI执行然后处理程序,将保存ARM的状态将被存储在我提到的状态库。

谢谢你的对话

杰克汉
离线
最后一次见到:3年2个月前
已加入:2017-07-20 04:11
谢谢你的回答。

谢谢你的回答。
我要实现的是无外观启动。
启动后,我想重新启动看门狗重置前的权利点。
[发生看门狗时堆栈推送,重置后堆栈弹出。]
有可能吗?

MT\u对话框
离线
最后一次见到:3个月4天前
工作人员
已加入:2015-06-08 11:34
你好,杰克汉,

你好,杰克汉,

你所提到的可能是可能的,而且相当棘手(我不能给出具体的说明如何做,因为这样一个方案没有实现,也正如所提到的是相当棘手的,因为你将不得不保存除了ARM寄存器,主堆栈,每个任务的堆栈,以便在重新启动后重新应用,这些是我可以想到的一些事情)。但我看不出这样的原因。例如,假设设备在看门狗出现后命中NMI处理程序,这意味着代码被卡在特定的指令中,系统变得无响应(尝试访问外围设备,但没有响应,等等)。NMI点击,你保存ARM的状态,你假设RAM是正常的,因为它没有断电,启动时你重新应用ARM寄存器,设备将继续从它卡住的部分,另一个NMI将在几秒钟内发生。所以,我不认为有理由实现这样的东西,我的意思是它完全相同,如果你阻止重置从NMI由于看门狗和继续执行代码。

谢谢你的对话