LM3S8962,
ASM问题求助
为什么以下代码可以正常运行:
OSIntCtxSw
PUSH {R4, R5}
LDR R4, =NVIC_INT_CTRL ; trigger the PendSV exception
LDR R5, =NVIC_PENDSVSET
STR R5, [R4]
POP {R4, R5}
BX LR
NOP
但如果改为以下就出错:
OSIntCtxSw
PUSH {LR}
PUSH {R4, R5}
LDR R4, =NVIC_INT_CTRL ; trigger the PendSV exception
LDR R5, =NVIC_PENDSVSET
STR R5, [R4]
POP {R4, R5}
POP {LR} // 只要对LR 进行写操作就会出错
BX LR
NOP
只要对LR 进行写操作就会出错,请问是什么原因?
此帖出自
小平头技术问答
的CM3看,链接寄存器会自动入栈,自动出站。如果要操作的话,LZ应该将CPU工作模式改了。。。
不知道上面的理解对不对。。。。。查查LR人使用手册。。。。
请问应该怎样改CPU的工作模式?
在该例子中,PUSH/POP 从R0到R12中的任意一个或若干个寄存器都没有出错,但只要POP列表中有LR就会出错。实在想不明白。
一周热门 更多>