1、生成Map文件

复制中断向量表前需要知道中断向量表的大小,可以通过编译生成的Map文件查看。

2、查看中断向量表大小

中断向量表的大小是固定的,与程序代码量无关,打开Map文件,直接搜索0x08000000,我使用的 MCU 是 STM32H743XIH6,中断向量表大小为 664 字节,即 MDK 编译生成的 Bin 文件,开始的 664 个字节是中断向量表

    RESET                                    0x08000000   Section      664  startup_stm32h743xx.o(RESET)!!!main                                  0x08000298   Section        8  __main.o(!!!main)!!!scatter                               0x080002a0   Section       52  __scatter.o(!!!scatter)!!dczerorl2                              0x080002d4   Section       90  __dczerorl2.o(!!dczerorl2)!!handler_zi                             0x08000330   Section       28  __scatter_zi.o(!!handler_zi)

3、读取中断向量表的内容,并直接放在指定的SRAM 地址处

// 中断向量表大小 664 字节
#define  VECTOR_TABLE_SIZE 664
// 中断向量表复制到 SRAM 0x24001000 地址
u8 vector_table[VECTOR_TABLE_SIZE] __attribute__ ((at(0X24001000)));
// 读取 Flash 内容
// STMFLASH_Read(addr,(u32*)vector_table,VECTOR_TABLE_SIZE/4);

值得注意的是,STMFLASH_Read 函数不能读取 Flash 程序代码所在的空间,否则会出现异常

我这里的设计是 BootLoader 程序通过 Can 接收待升级的固件 Bin 文件(然后写入指定的 FLASH 地址处,在把前 664 字节数据读出来复制给 vector_table)并将前 664 个字节的中断向量表直接复制给 vector_table,即完成了中断向量表的复制到 SRAM 的 0x24010000

4、APP程序的设置

以上只是完成了,中断向量表的复制,还需要告诉 APP 程序中断向量表的位置,APP程序中添加如下代码。

SCB->VTOR = D1_AXISRAM_BASE|0x1000;

再运行 APP 程序的时候,使用的就是 SRAM 中的中断向量表了。
这样做的目的是,固件升级的时候,可以在 FLASH 中存放多个 APP 程序。

STM32中断向量表复制到SRAM中运行相关推荐

  1. TMS320F280049C 学习笔记9 CMD文件 程序从FLASH复制到RAM中运行

    文章目录 动机 CMD文件结构与语法 MEMORY和SECTIONS指令 MEMORY指令 SECTIONS指令 程序与数据段 已初始化段 未初始化段 其他指令 #pragma指令的使用 程序从FLA ...

  2. 将flash中的代码复制到RAM中运行的方法

    在MCU的使用过程中,偶尔会遇到将flash中的代码复制到RAM中运行的情况,下面就来说一下具体的方法,以28335的flash初始化为例: 1,编写函数,该函数处于flash中,就是我们即将要复制的 ...

  3. DSP28377S_程序从FLASH部分复制到RAM中运行详解

    程序从FLASH部分复制到RAM中运行详解 为什么要复制到RAM中运行 CMD文件中对存储空间的分配 CMD文件中对段的定义 CMD文件中FLASH部分复制到RAM中的定义 main中的操作 编译后如 ...

  4. STM32 进阶教程 11 - RAM中运行程序

    前言 上一讲我们讲到stm32可以将代码直接下载到RAM中时行程序调试,同时可以有效避开STM32 Flash 擦写次数有限问题,其实除了仿真调试时将程序设置在RAM中可以解决FLASH擦写次数问题外 ...

  5. 把DSP TMS320F28XXX的程序段从flash复制到ram中运行

    翻译自TI应用手册SPRAAU8(http://www.ti.com.cn/cn/lit/an/spraau8/spraau8.pdf) 摘要 这个应用报告和相关的代码提供了一种把编译后的程序段从TM ...

  6. DSP28335—把TMS320F28XXX的程序段从flash复制到ram中运行

    文章来自:http://www.61ic.com/Article/C2000/Delfino/201303/47552.html 翻译自TI应用手册SPRAAU8 很详细,对编写CMD文件很有帮助! ...

  7. STM32 在SRAM中调试代码

    本文所有内容转自他人内容,非本人原创,仅做资料收集.原文地址 https://www.cnblogs.com/firege/p/5806141.html 全套200集视频教程和1000页PDF教程请到 ...

  8. STM32的完整启动流程分析-----在外存flash中运行代码

    1. 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值.BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用.一旦完成对 BOOT1 的采 ...

  9. bcp大容量复制实用工具_运行中的BCP(大容量复制程序)命令

    bcp大容量复制实用工具 There are various methods available for bulk data operations. 有许多方法可用于批量数据操作. BCP utili ...

最新文章

  1. 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)
  2. Android扫描二维码 实现 登录网页
  3. 111.什么是基带信号?什么是宽带信号?
  4. RequestMapping注解的作用
  5. java ibatis 获取执行的sql_小程序官宣+JAVA 三大框架基础面试题
  6. mysql与python的交互
  7. Kubernetes之持久化存储
  8. c语言实现lcd显示自动滚动,lcd1602实现字幕滚动原理_lcd1602滚动显示程序
  9. JSP还能撑多久? -- 关于WEB开发的一些思考
  10. quot;紫陀螺quot;网友感触转载系列之…
  11. 想要成功,你得像剥洋葱一样一层一层地撕开自己
  12. mongodb不等于某个值_mongodb条件查询不等于
  13. 分享 | 日置3561电池测试仪调零/自校准详解教程
  14. Java基础知识与集合部分面试题整理
  15. java jpanel 层,java – 循环遍历JPanel
  16. java修饰符(转)
  17. 计算机考研高数试卷答案,考研数学试卷大全(全国各高校历年试卷)
  18. 先导课程 单片机_单片机课程教案-课程教案
  19. CobaltStrike魔改与增强
  20. Anaconda安装老版本tensorflow

热门文章

  1. 九鼎财务软件 linux,九鼎单位版软件(集中支付、财务).doc
  2. 元月元日是哪一天_元日指的是哪一天?
  3. badatatable转成json_DataTable 转换成 Json的3种方法 | YuXi
  4. HTML播放本地视频
  5. EasyTouch_简单触控
  6. ORB特征提取和匹配
  7. PHP带头大哥谈学习OO的一点体会!
  8. Django学生个性化培养的教学资源平台的设计与实现计算机毕设源码19385
  9. 计算机二级Web(1):Web技术基础
  10. Centos7安装RabbitMQ与使用(超详细)