http://blog.csdn.net/u012722571/article/details/47295245

lanmanck原创】

这篇文章已经说了STM32的启动过程:

http://blog.csdn.net/lanmanck/article/details/8252560

我们也知道怎么跳到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、进到C语言后会先配置NVIC,NVIC_SetVectorTable()里面可以配置中断向量表的起始地址和偏移,主要是告诉CPU该向量表是位于Flash还是Ram,偏移是多少。例如设置为位于Flash内,偏移就是烧入的程序地址,可在Keil target中设置。这样CPU就知道入口地址了。

4、发生中断后,CPU找到中断向量表地址,然后根据偏移(对号入座)再找到中断地址,这样就跳过去了。

我们截一个图说明一下,map文件:

对应的bin文件,看是不是放的上面地址:

显然,200039c0就是栈顶地址,而08006F21就是reset_handler地址!

如何定位?以放到0x20000000为例

1、keil设置ram起始为0x20000100,我们在0x20000000~0x20000100放中断向量表,其他给程序用

2、设置NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);  设置NVIC_SetVectorTable(NVIC_VectTab_RAM,0);

3、跳到C时把中断向量表拷贝到0x20000000

STM32中断向量表的位置,重定向相关推荐

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

    关于 STM32 中断向量表的位置 .重定向问题 首先我们需要跳到 main 函数,这个就不多说了.那么,中断发生后,又 是怎么跑到中断入口地址的呢?从 stm32f10x.s 可以看到,已经定义好了 ...

  2. STM32 中断向量表的位置 、重定向

    [lanmanck原创] 这篇文章已经说了STM32的启动过程: http://blog.csdn.net/lanmanck/article/details/8252560 我们也知道怎么跳到main ...

  3. arm9 中断向量 重定位_STM32中断向量表的位置,重定向

    这篇文章已经说了 STM32 的启动过程: http://blog.csdn.net/lanmanck/article/details/8252560 我们也知道怎么跳到main函数了,那么,中断发生 ...

  4. 痞子衡嵌入式:嵌入式Cortex-M中断向量表原理及其重定向方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Cortex-M中断向量表原理及其重定向方法. 接着前文 <嵌入式Cortex-M裸机环境下临界区保护的三种实现> 继续聊, ...

  5. STM32中断向量表复制到SRAM中运行

    1.生成Map文件 复制中断向量表前需要知道中断向量表的大小,可以通过编译生成的Map文件查看. 2.查看中断向量表大小 中断向量表的大小是固定的,与程序代码量无关,打开Map文件,直接搜索0x080 ...

  6. STM32的printf函数重定向

    版权声明:原创文章,请持怀疑态度阅读,欢迎转载,但请注明文章出处. https://blog.csdn.net/qq_29344757/article/details/75363639 在前面学习了S ...

  7. Keil环境下STM32定位hardfault位置方法(addr2line工具)和遇到的情况

    目录 一.概述 二.方法一:Call Stack + Locals 三.方法二:Show Code at Address 3.1 需要通过LR判断SP? 3.1.1 关于MSP和PSP 3.1.2 为 ...

  8. 探讨STM32代码运行位置

    对于x86的pc机和单片机等嵌入式开发系统程序的存储是截然相反的,即:   x86的pc机cpu在运行的时候程序是存储在RAM中的,而单片机等嵌入式系统则是存于flash中. x86cpu和单片机读取 ...

  9. 一、STM32启动文件详细解析

    一.STM32启动文件详细解析 STM32启动文件详细解析(V3.5.0) 以:startup_stm32f10x_hd.s为例 [cpp] view plain copy ;************ ...

最新文章

  1. jQuery 2.0.3 源码分析core - 整体架构
  2. 2.7 usb摄像头之usb摄像头描述符打印
  3. 青龙羊毛——顺丰科勒(搬运)
  4. 工作计划2017-01-03
  5. java math round小数_Java——Math的round方法
  6. Python min 函数 - Python零基础入门教程
  7. c语言常考的程序,C语言 一些常考得东西
  8. Anaconda3的安装
  9. 用户不在sudoers文件中,此事将被报告
  10. asterisk 常用命令
  11. 解封装(七):av_read_frame读取帧数据函数分析和产生的空间问题分析,以及AVPacket分析
  12. java ftp 损坏_java ftp上传时断网,文件损坏
  13. memset 和 fill 初始化数组
  14. 在React项目中,如何优雅的优化长列表
  15. Java的System.out.println并不等于C的printf
  16. 计算机地球一小时word处理,地球一小时策划书word版
  17. 企业版IDP的申请及“In House”发布
  18. 【Pytorch】pack_padded_sequence与pad_packed_sequence实战详解
  19. 2021-2027全球与中国5G核心网市场现状及未来发展趋势
  20. 数据链路层的主要功能与服务

热门文章

  1. win10 路由表配置
  2. 小波变换之尺度函数和小波函数
  3. JavaScript Window Screen
  4. 程序员的520,送给女友的几行漂亮的代码(js版)
  5. 耐心排序之最长递增子序列(LIS)
  6. JMeter笔记9 | JMeter参数化
  7. java中的持有引用
  8. 如何把你的安卓手机变成Linux?
  9. 布法罗大学计算机中国博士,【博士】计算机网络方向招生 - 计算机科学技术系(CS)版 - 北大未名BBS...
  10. 常见的信息安全相关SCI期刊