Arm 编程stm32f10x:当进入中断服务例程时,链接寄存器得到什么值?为什么?

Arm 编程stm32f10x:当进入中断服务例程时,链接寄存器得到什么值?为什么?,arm,stm32,Arm,Stm32,我有一个关于ARM stm32f10x进入中断服务例程时会发生什么的问题:链接寄存器得到什么值?为什么呢?答案是肯定的 2.3.7异常输入和返回 当处理器处于处理程序模式且 执行以下指令之一以加载EXC_返回 在PC中输入的值: •包含PC的POP指令 •带有任何寄存器的BX指令 •以PC为目标的LDR或LDM指令 EXC_RETURN是加载到LR上的值 异常条目。异常机制依赖于此值来 检测处理器何时完成异常处理程序。这个 此值的最低四位提供有关返回堆栈的信息 和处理器模式。。表17显示了带有

我有一个关于ARM stm32f10x进入中断服务例程时会发生什么的问题:链接寄存器得到什么值?为什么呢?

答案是肯定的

2.3.7异常输入和返回

当处理器处于处理程序模式且 执行以下指令之一以加载EXC_返回 在PC中输入的值:

•包含PC的POP指令

•带有任何寄存器的BX指令

•以PC为目标的LDR或LDM指令

EXC_RETURN是加载到LR上的值 异常条目。异常机制依赖于此值来 检测处理器何时完成异常处理程序。这个 此值的最低四位提供有关返回堆栈的信息 和处理器模式。。表17显示了带有 异常返回行为的描述


没有记录具体的值,只是他们可能会说它是无效的地址,只需几秒钟的努力,您就会看到它主要是0xFFs。他们可能会也可能不会比这更详细,但我认为我在任何ARM或ARM TRM中都没有看到它……人们会期望它特定于核心实现,我们所关心的是保存它并像任何其他lr值一样将其返回。原因很明显,因此逻辑可以从正常值判断异常返回返回(bx或pop),这样他们就可以在向量表中具有C函数地址的功能,并且不像大多数其他处理器那样没有其他特殊开销。你读过arm文档了吗?没有检查,但我认为这是一个神奇的值,它与一个分支一起用来指示异常返回——根据要从哪个堆栈恢复上下文,有几种不同的可能性。我认为这是有记录的。