gpt4 book ai didi

assembly - 皮质-M3 : Changing Interrupt Return Address

转载 作者:行者123 更新时间:2023-12-02 19:23:54 26 4
gpt4 key购买 nike

我需要编辑 ISR 的返回地址。处理中断后,ISR 应该返回到特定地址,无论它来自哪里。这是为了促进快速系统重置。此功能无法在普通固件中实现,因为时间太紧,无法频繁检查某处的标志。

我尝试过编辑 ISR 在异常输入时保存的堆栈帧,这似乎可以工作几毫秒,然后进入微 Controller 的“哦,糟糕,出了问题”状态。在这种状态下,堆栈看起来很正常,没有任何迹象表明出现任何问题。即使我弹出堆栈并将完全相同的数据推回到堆栈上,也会发生这种情况。此外,使用堆栈指针相对存储会导致此失败。

有关异常处理的信息可以找到here ,但我找不到足够的信息来告诉我出了什么问题。

想法?我真的只需要让中断返回到相同的标签,无论中断在哪里发生,并且核心不会变得很麻烦。

谢谢,斯图尔特

最佳答案

警告一句:这个项目是用汇编语言编写的,带有很多假设。这个过程在 C 或汇编语言中可能不安全,因为您不知道中断发生时 CPU 的确切状态。

在对堆栈帧进行了一段时间的摆弄之后,我意识到保存的状态寄存器(xPSR)设置了一些我在操作期间没有看到设置的位。事实证明,中断有时会在 LDM 或 STM 命令中间触发。 Cortex-M3 具有保存这些命令状态的功能,以便可以正确恢复它们。当它从中断返回到我指定的位置并期望完成 LDM/STM 命令但无法完成时,问题就出现了。

为了解决这个问题,我只需清除堆栈帧中保存的状态寄存器中的ICI位即可。这使得 Cortex-M3“忘记”它正在处理 LDM/STM 命令,并允许处理器返回到任意位置而不会产生任何后果。

关于assembly - 皮质-M3 : Changing Interrupt Return Address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com