如何为Cortex-M3设置异常处理程序

时间:2014-02-19 08:32:33

标签: exception-handling cortex-m3 thumb

我开始在STM32L152 Cortex-M3上做一些简单的项目......

我读到M3只是thumb2,因此我们需要将异常处理程序地址的LSB保持为'1'以保持拇指模式。

.thumb
.section .startup, "ax"
exc_vectors:
       .word top_of_stack
       .word reset_handler
       .word NMI_handler
       .word hardfault_handler
           .
           .
reset_handler:
           @some code here

由于指令是16位或32位,所以说'reset_handler'符号的地址为LSB = 0是否正确?

如果是这样,通常,如何/何时/何地将处理程序符号(reset_handler,NMI_handler等)的LSB设置为'1'?

非常感谢

1 个答案:

答案 0 :(得分:0)

C编译器会自行完成此操作,因此您可以放松一下。

Cortex-M3内核是32位的。 'reset_handler'向量的地址为0x04。你是对的,所有的矢量都有LSB == 0,但是! 如果您的复位向量从地址0x0B0C开始,如下所示:

              ResetISR:
00000b0c:   F7FFBEC4 B.W             _c_int00
00000b10:   4770     BX 

然后编译器会将它在向量表中写为0x0B0D,如下所示:

00000004:   00000B0D ANDEQ