原帖 | 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()用户空间中的代码。

相关笔记