欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

arm9 中断向量 重定位_关于STM32中断向量表的位置 、重定向问题

发布时间:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 arm9 中断向量 重定位_关于STM32中断向量表的位置 、重定向问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

关于

STM32

中断向量表的位置

、重定向问题

首先我们需要跳到

main

函数,这个就不多说了。那么,中断发生后,又

是怎么跑到中断入口地址的呢?从

stm32f10x.s

可以看到,已经定义好了一大堆

的中断响应函数,这就是中断向量表,标号

__Vectors

,表示中断向量表入口地

址,例如:

AREA RESET, DATA, READONLY ;

定义只读数据段,实际上是在

CODE

区(假设

STM32

FLASH

启动,则此中断向量表起始地址即为

0x8000000

)

EXPORT

__Vectors

IMPORT

OS_CPU_SysTickHandler

IMPORT

OS_CPU_PendSVHandler__Vectors

DCD

__initial_sp

;

Top

of

Stack

DCD

Reset_Handler

;

Reset

Handler

DCD

NMI_Handler

;

NMI

Handler

DCD

HardFault_Handler

;

Hard

Fault

Handler

DCD

MemManage_Handler

;

MPU

Fault

Handler

DCD

BusFault_Handler

;

Bus

Fault

Handler

DCD

UsageFault_Handler

;

Usage

Fault

Handler

这个向量表的编写是有讲究的,跟硬

件一一对应不能乱写的,

CPU

找入口地址就靠它了,

bin

文件开头就是他们的

地址,参考手册

RM0008

10.1.2

节可以看到排列。我们再结合

CORTEX-M3

的特性,他上电后根据

boot

引脚来决定

PC

位置,比如

boot

设置为

flash

启动,

则启动后

PC

跳到

0x08000000

。此时

CPU

会先取

2

个地址,第一个是栈顶地址,

第二个是复位异常地址,故有了上面的写法,这样就跳到

reset_handler

。那么

这个

reset_handler

的实际地址是多少

.

?下面的一堆例如

Nmi_handler

地址又是

多少呢?发生中断是怎么跑到这个地址的呢?下面挨个讲解。

1

、我们可以通

过反向来得知这些入口地址,查看工程下的

map

文件就可以看到了,这个地址

keil

里面设置的

target->flash

起始地址息息相关,实际上我们不太需要关心,

让编译器分配,中断向量表放的就是他们的地址。

2

、对比

ARM7/ARM9

内核,

Cortex-M3

内核则是固定了中断向量表的位置而起始地址是可变化的。

3

、进到

总结

以上是生活随笔为你收集整理的arm9 中断向量 重定位_关于STM32中断向量表的位置 、重定向问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。