关于STM32的中断向量表的重映射的问题

发布者:TechGuru123最新更新时间:2017-09-11 来源: eefocus关键字:STM32  中断向量表  重映射 手机看文章 扫描二维码
随时随地手机看文章
1  为什么要对中断向量表进行重新映射?           
   COREM3权威指南上讲“然而,为了动态重分发中断, CM3 允许向量表重定位——从其它地址处开始定位各异常向量。
   这些地址对应的区域可以是代码区,但也可以是 RAM 区。在 RAM区就可以修改向量的入口地址了。”。           
   疑惑:                            
        1.如果不重新映射的话,中断向量表的地址应该是这样的:0X0000 0000是SP;0X0000 0004是复位向量;0X0000 0008是NMI;后面按照中断编号的顺序依次按4递增。
          这样的话,不也能存得下中断向量表吗?反正存的是一些函数指针,占不了多少空间,干嘛还要重新映射到其他的地方呢?                           
        2.如果重新映射的话,中断向量表的入口地址就变成0x0800 0000了。但是一开始已经开辟的那部分空间(0x0000 0000......)存放的中断向量表不是就等于没用吗?                           
        
问题一:想要解释你的疑惑先要明白几个道理
1、无论向量表是否重映射过,复位后都是从0地址的向量表处获取SP和复位入口。

2、0地址处的中断向量表,通常是ROM地址。通常只能通过指定链接地址,然后烧录改写。

3、在一些带升级功能的产品中,通常分为boot和app两部分。boot通常出产以后就不再变化,使用0地址向量表,必须通过Jtag之类的工具才能改写。
   而boot中带有下载功能个(USB、串口或SPI),用户可以根据需要下载APP。

4、注意第2条,APP通常需要自己设计中断服务。如果不重映射,只能再boot处设计查表程序,通过boot跳转,效率不高。
   而擦写0地址向量,如果在升级过程中掉电,则boot也无法启动。因此,需要进入APP后,重映射向量表。

问题二:你的理解的对的。然而,0地址处的中断向量表区域通常不放代码。芯片在FLASH地址分配上,也很少有将FLASH地址紧密的排在向量表之后的。因此,并不影响。


关键字:STM32  中断向量表  重映射 引用地址:关于STM32的中断向量表的重映射的问题

上一篇:STM32F0xx IAP实现之中断向量表重定义
下一篇:STM32中断向量表偏移量0x200详解

推荐阅读最新更新时间:2024-03-16 15:36

STM32学习---位带操作总结
*简介:*在计算机中所有的数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数进行操作,因此处理数据的速度非常快。 在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千金的效果,正是因为这些优点,所以位操作的应用非常广泛,同时掌握位带操作对于我们理解STM32的原理非常有用。 ** *过渡:***为了方便大家理解,有必要补充一些基础知识。 1.计算中的符号位: 计算机的符号位就是在处理二进制数据时,专门规定有一位,是用来确定数据的正负,符号位是1表示负数,是0表示正数。当然这里说的是有符号数,这个符号位通常是数据的最高位,如8位数据,左边第一位是符号位,后面7位用来表示数据大小。 2.补码: 注意,此处
[单片机]
STM32 USB学习笔记2
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library STM32Cube库中提供了一些有关USB的例程,在其工程目录下的Applications目录中,这里打开STM3210E_EVAL目录,可以看到如下例程: 这里选取一个简单的例子CDC_Standalone,为一个USB通信例程,具体实现是一个USB转串口的功能,相当于USB串口线。把示例里面的inc和src目录下的文件拷贝到新建工程中,这里是把跟usb通信相关的文件放到了vcp目录下。文件目录结构如下: 其中BSP目录很简单,由于所购
[单片机]
STM32之IO输出方式理解
下面是开漏和推挽的区别: 开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。 推挽输出就是单片机引脚可以直接输出高电平电压。低电平时接地,高电平时输出单片机电源电压。这种方式可以不接上拉电阻。但如果输出端可能会接地的话,这个时候输出高电平可能引发单片机运行不稳定,甚至可能烧坏引脚。
[单片机]
stm32 中bootloader、startup_stm32f10x_md.s的作用
一、启动文件的作用是: 1. 初始化堆栈指针 SP; 2. 初始化程序计数器指针 PC; 3. 设置堆、栈的大小; 4. 设置异常向量表的入口地址; 5. 配置外部 SRAM 作为数据存储器(这个由用户配置,一般的开发板可没 有外部 SRAM); 6. 设置 C 库的分支入口__main(最终用来调用 main 函数); 7. 在 3.5 版的启动文件还调用了在 system_stm32f10x.c 文件中的 SystemInit() 函数配置系统时钟,在旧版本的工程中要用户进入 main 函数自己调用 SystemInit() 函数。 二、关于启动文件的介绍,可以参考: 1、http://www.360doc.com/cont
[单片机]
<font color='red'>stm32</font> 中bootloader、startup_stm32f10x_md.s的作用
stm32 中关于nvic的形象化解释
看到了一片关于stm32 nvic的解释,使用到了阶级 和阶层的概念,很形象化也很容易理解。 链接:http://blog.sina.com.cn/s/blog_5f17618501012rpp.html NVIC——Nested Vectored Interrupt Controller(嵌套中断向量控制器) STM32有43个channel的settable的中断源:AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4bits。这4个bits用于分配pre-emption优先级和sub优先级,在STM32的固件库中定义如下: //---------------
[单片机]
stm32不小心把SWD和JTAG都给关了,程序下载不进去,解决办法
我们有时候会碰到各种问题导致STM32或者STM8的程序突然就下载不进去板子了。可以按照以下步骤来解决。 一、下载方法步骤: 1、将板子供电全部断开,这里包括3.3V电源供电和JLINK等所有能给开发板供上电的设备全断开。 2、找到BOOT0引脚,将BOOT0拉高。   方法:在板子上找一个高电平引脚,手动用导线将BOOT0连接到该引脚上即可。   (注意:我的STM32板子供电是3.3V的,所以我找了一个3.3V的引脚,用导线连接到了BOOT0上,千万别弄错了,电平接高了不小心可是要烧坏板子的!) 3、BOOT0拉高以后,保持这个姿势不要动,打开电源,重新给板子上电。 4、插上JLink或者STLink,下载程序。一般这次肯
[单片机]
STM32开发 -- VS2017错误
出现如下错误: error C3688: 文本后缀“L”无效;未找到文文本运算符或文本运算符模板“operator “”“”L” 解决方法:在字符串里加引号用 原来宏定义为: #define CN_ASSERT(E) ((E) ? true : CnComm::Assert(_T(“CN_ASSERT(“)_T(#E)_T(“) failed; CnComm(“)CN_LINE(LINE)_T(“); “))) 修改为: #define CN_ASSERT(E) ((E) ? true : CnComm::Assert(_T(“CN_ASSERT(”)_T(#E)_T(”) failed; CnComm(”)CN_
[单片机]
STM32系统中如何数据掉电保护
在嵌入式设备开发中,往往需要保存一些掉电不易失性的数据,如果系统配置、用户定制信息等等,如果增加额外的ROM IC,比如(基于I2C的24C02等等)往往会造成额外的PCB空间增大,硬件成本增加,降低产品的性价比。如果单从实用性来讲,在stm32的系统中,诸如此类的应用,笔者推荐如下2个方法可以去尝试和借鉴。 基于备份寄存器 原理:对于大容量的MCU系列来说,它有着42个16bit的备份寄存器,而中小容量的微处理器却只有10个16bit的备份寄存器。以STM32F103C8T6为例,42个备份寄存器的地址偏移为:0x04~0x28,0x40~0xBC,共可以存储84个byte数据。备份寄存器是依赖者备份电源的,当外界的VDD掉
[单片机]
<font color='red'>STM32</font>系统中如何数据掉电保护
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved