打印
[STM32F1]

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

[复制链接]
3323|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的文件里存着呢。

使用特权

评论回复
5
23jiekou| | 2016-1-26 13:05 | 只看该作者
哇塞

使用特权

评论回复
6
2602082487|  楼主 | 2016-1-26 21:04 | 只看该作者
huangcunxiake 发表于 2016-1-25 23:01
从stm32f10x.s可以看到,已经定义好了一大堆的中断响应函数,这就是中断向量表,标号__Vectors,表示中断向 ...

一个程序会定义很多个AREA,怎么RESET段名的那个段是从0x8000000处开始存放呢?

使用特权

评论回复
7
xuan309170083| | 2016-1-26 21:13 | 只看该作者
2602082487 发表于 2016-1-26 21:04
一个程序会定义很多个AREA,怎么RESET段名的那个段是从0x8000000处开始存放呢? ...

这个与内部存储器地址结构有关,便于程序执行中断时快速跳转

使用特权

评论回复
8
lwsn| | 2016-1-26 21:49 | 只看该作者
跳到C时把中断向量表拷贝到0x20000000

使用特权

评论回复
9
Soraka| | 2016-1-27 20:26 | 只看该作者
与内部存储器地址结构有关

使用特权

评论回复
10
奥德赛| | 2016-1-28 20:55 | 只看该作者
感觉很有必要学学汇编啊

使用特权

评论回复
11
secretuniverse| | 2016-1-29 15:11 | 只看该作者
在option那里有一个专门设置的,不知道你说的是不是这个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

35

帖子

0

粉丝