[STM32F1] stm32的中断向量表是怎么放到指定的地址的?

[复制链接]
3864|10
 楼主| 2602082487 发表于 2016-1-25 16:47 | 显示全部楼层 |阅读模式
MDK里面的启动文件中,是怎么把中断向量表放到特定的地址的?比如51里面有ORG指令,ARM里面的汇编是如何实现的?
dongnanxibei 发表于 2016-1-25 17:31 | 显示全部楼层
如何定位?以放到0x20000000为例
1、keil设置ram起始为0x20000100,我们在0x20000000~0x20000100放中断向量表,其他给程序用
2、设置NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);
3、跳到C时把中断向量表拷贝到0x20000000
huangcunxiake 发表于 2016-1-25 23:01 | 显示全部楼层
从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
huangcunxiake 发表于 2016-1-25 23:02 | 显示全部楼层
就在那个.s的文件里存着呢。
23jiekou 发表于 2016-1-26 13:05 | 显示全部楼层
 楼主| 2602082487 发表于 2016-1-26 21:04 | 显示全部楼层
huangcunxiake 发表于 2016-1-25 23:01
从stm32f10x.s可以看到,已经定义好了一大堆的中断响应函数,这就是中断向量表,标号__Vectors,表示中断向 ...

一个程序会定义很多个AREA,怎么RESET段名的那个段是从0x8000000处开始存放呢?
xuan309170083 发表于 2016-1-26 21:13 | 显示全部楼层
2602082487 发表于 2016-1-26 21:04
一个程序会定义很多个AREA,怎么RESET段名的那个段是从0x8000000处开始存放呢? ...

这个与内部存储器地址结构有关,便于程序执行中断时快速跳转
lwsn 发表于 2016-1-26 21:49 | 显示全部楼层
跳到C时把中断向量表拷贝到0x20000000
Soraka 发表于 2016-1-27 20:26 | 显示全部楼层
与内部存储器地址结构有关
奥德赛 发表于 2016-1-28 20:55 | 显示全部楼层
感觉很有必要学学汇编啊
secretuniverse 发表于 2016-1-29 15:11 | 显示全部楼层
在option那里有一个专门设置的,不知道你说的是不是这个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

35

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0