我们正在使用arm9和ucos。 OS_CPU_ARM_ExceptHndlr_BrkTask
公共移植功能的最后一个仪器在我们的系统中有奇怪的行为。
Instrument: LDMFD SP!,{R0-R12,LR,PC}^
假设SP为0x10002000,以下15个DWORD(将复制到R0-R12,LR,PC)的值为1到15.我们发现PC(R15)已更改并跳转到15,但SP(R13)变为奇怪的值(远远超出堆栈存储空间的地址)。我预计它会变成0x1000203C(0x10002000 + 4 * 15)。
为什么R13会这样改变?
答案 0 :(得分:0)
该指令与堆栈中的其他寄存器一样加载r14
。写入PC会导致跳转。这不是将返回地址设置为链接寄存器的分支和链接。
此外,该指令实际上是异常返回(因为^)。因此,根据您要返回的模式,r14
可能会被归档。因此,在异常返回之后,您可能会看到与从内存加载的r14
不同的SELECT
CONCAT ( CAST ( DOCNUM AS INTEGER ), '_', VERSION ) AS DOC_VER,
DOCNUM, VERSION, CHECKOUT_DIR
FROM
MHGROUP.CHECKOUT
WHERE
CHECKOUT_DIR LIKE '%\0257\%'
。