我开始在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'?
非常感谢
答案 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