0

我开始在 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”?

非常感谢

4

1 回答 1

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 
于 2014-02-19T18:54:03.357 回答