在复位异常后,CPU进入handle模式,LR被赋值0xFFFFFFF9

🔍 溯源 ✍️ Jack | 📅 2024-12-01 | 👍 0 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/调试可靠性 #技术/ARM体系结构 #质量/普通

原帖 | Jack | 2024-12-01 13:12 | 👍0 | 阅读约1

在复位异常后,CPU进入handle模式,LR被赋值0xFFFFFFF9。有个疑问:就是从汇编语言上看,貌似CPU是在ISR里面进入main()函数并内部循环,那CPU是怎么在进入main()函数后,退出handle模式的?

答:
这是一个很经典内核行为问题,
当 CPU 进入异常(比如 ResetHandler 或某个中断向量)时,LR(链接寄存器)可能会被赋值特定的“伪”返回地址。这些地址并不是普通的内存地址,而是对异常返回行为的编码,0xFFFFFFF9就是其中一种,表示返回到thread线程模式。那LDR R0, =__main就是装载了__main的地址,然后BX R0就是跳转到__main,执行完后,由于LR是0xFFFFFFF9,则退出handler模式而进入thread模式,然后开始运行main()用户空间中的代码。

5123e918af0d.jpg


相关笔记