从我的固件(基于arm的处理器),我需要访问设置r0到r15的arm皮质寄存器的值。我该如何访问这些寄存器?固件使用的是c代码。我是否需要使用内联汇编程序代码?任何示例代码也会有所帮助。
答案 0 :(得分:0)
评论中提到的artless noise - 一些寄存器已存入银行。您没有提供CPU类型。是Corter Mx,Cortex Ax?
将所有寄存器转储到崩溃日志记录非常简单,但由于问题中缺少详细信息,我们需要考虑一些假设。
固件在“用户”或“系统”模式下工作,崩溃将CPU切换为“中止”模式
STMDB SP, {R0-R14}^
这会将所有寄存器转储到'abort'堆栈中。保存的值可以从内存中访问
SP_abt
应该提前适当设置。或类似的选择是将崩溃缓冲区和转储寄存器分配到特定的内存区域,而不是堆栈。
abort_handler:
push {lr} // LR_abt into 'abort' stack
ldr lr, =crash_buffer // load address of crash log buffer
stm lr, {r0-r14}^ // Save *USER* R0-R14
// do error handling if any
pop {lr} // restore original LR_abt
subs pc, lr, #8 // return from ISR (optional)
从非“用户”/“系统”模式中止。处理非常相似,但要转储库存SP
或LR
或Rx_fiq
,您需要
SPSR
register