Thread 中讨论的其他器件:SYSBIOS
大家好、
是否有任何方法可以在 C 语言中读取内核 LR 寄存器?
(如果是、请勿打扰阅读! 如果没有、下面提供了更多详细信息、以说明我为什么需要读取 LR 寄存器。 也许如果无法直接读取、那么也许我可以重新调整我的方法、这样我就不需要读取 LR 寄存器)
我正在使用 TIRTOS/SYSBIOS 异常处理程序。
我决定使用标准异常处理程序、因为它们提供了一些有用的异常状态预处理、并向控制台提供输出、帮助我确定我的自定义异常处理是否正常工作。
我的配置如下
- m3Hwi.exhandlerFunc 未定义、因此将使用其中一个默认处理程序、
- m3Hwi.enableException = true 如果在开发过程中开发以获得完整的异常解码,则一旦事情解决,将切换到 false
- m3Hwi.exeHookFunc ="&myExceptionHook"为我提供了一个可执行一些自定义异常处理的函数。
我的自定义执行处理程序(myExceptionHook)将异常上下文(加上一些额外的系统状态)转储到外部闪存(bitbashed)、以便稍后可以读出该异常来尝试和诊断异常。
这里的问题是 myExceptionHook 传递一个异常上下文、该异常上下文包含异常之前 LR 寄存器的状态、但不包含异常之后 LR 寄存器的状态。 异常之后的值提供了一些有关发生异常的上下文的信息、并由标准异常处理程序对其进行解码。 当我从闪存读取异常上下文时、我希望能够执行同样的操作。
一个潜在的替代方法是停止使用内置的异常处理程序并具有一个完整的自定义处理程序(即 define m3Hwi.exhandlerFunc ="&myExceptionHandler")。 myExceptionHandler 传递了两个参数- 异常堆栈(可以处理为 ExceptionContext 结构)和我假设的是 LR 的当前状态。 我已经尝试过这种方法,但我遇到了尝试复制 Hwi_excillContext()函数的问题。 HWI 模块可以访问我没有访问的数据结构等。
谢谢
Julian