STM32中断向量表复制到SRAM中运行
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中运行相关推荐
- TMS320F280049C 学习笔记9 CMD文件 程序从FLASH复制到RAM中运行
文章目录 动机 CMD文件结构与语法 MEMORY和SECTIONS指令 MEMORY指令 SECTIONS指令 程序与数据段 已初始化段 未初始化段 其他指令 #pragma指令的使用 程序从FLA ...
- 将flash中的代码复制到RAM中运行的方法
在MCU的使用过程中,偶尔会遇到将flash中的代码复制到RAM中运行的情况,下面就来说一下具体的方法,以28335的flash初始化为例: 1,编写函数,该函数处于flash中,就是我们即将要复制的 ...
- DSP28377S_程序从FLASH部分复制到RAM中运行详解
程序从FLASH部分复制到RAM中运行详解 为什么要复制到RAM中运行 CMD文件中对存储空间的分配 CMD文件中对段的定义 CMD文件中FLASH部分复制到RAM中的定义 main中的操作 编译后如 ...
- STM32 进阶教程 11 - RAM中运行程序
前言 上一讲我们讲到stm32可以将代码直接下载到RAM中时行程序调试,同时可以有效避开STM32 Flash 擦写次数有限问题,其实除了仿真调试时将程序设置在RAM中可以解决FLASH擦写次数问题外 ...
- 把DSP TMS320F28XXX的程序段从flash复制到ram中运行
翻译自TI应用手册SPRAAU8(http://www.ti.com.cn/cn/lit/an/spraau8/spraau8.pdf) 摘要 这个应用报告和相关的代码提供了一种把编译后的程序段从TM ...
- DSP28335—把TMS320F28XXX的程序段从flash复制到ram中运行
文章来自:http://www.61ic.com/Article/C2000/Delfino/201303/47552.html 翻译自TI应用手册SPRAAU8 很详细,对编写CMD文件很有帮助! ...
- STM32 在SRAM中调试代码
本文所有内容转自他人内容,非本人原创,仅做资料收集.原文地址 https://www.cnblogs.com/firege/p/5806141.html 全套200集视频教程和1000页PDF教程请到 ...
- STM32的完整启动流程分析-----在外存flash中运行代码
1. 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值.BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用.一旦完成对 BOOT1 的采 ...
- bcp大容量复制实用工具_运行中的BCP(大容量复制程序)命令
bcp大容量复制实用工具 There are various methods available for bulk data operations. 有许多方法可用于批量数据操作. BCP utili ...
最新文章
- 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)
- Android扫描二维码 实现 登录网页
- 111.什么是基带信号?什么是宽带信号?
- RequestMapping注解的作用
- java ibatis 获取执行的sql_小程序官宣+JAVA 三大框架基础面试题
- mysql与python的交互
- Kubernetes之持久化存储
- c语言实现lcd显示自动滚动,lcd1602实现字幕滚动原理_lcd1602滚动显示程序
- JSP还能撑多久? -- 关于WEB开发的一些思考
- quot;紫陀螺quot;网友感触转载系列之…
- 想要成功,你得像剥洋葱一样一层一层地撕开自己
- mongodb不等于某个值_mongodb条件查询不等于
- 分享 | 日置3561电池测试仪调零/自校准详解教程
- Java基础知识与集合部分面试题整理
- java jpanel 层,java – 循环遍历JPanel
- java修饰符(转)
- 计算机考研高数试卷答案,考研数学试卷大全(全国各高校历年试卷)
- 先导课程 单片机_单片机课程教案-课程教案
- CobaltStrike魔改与增强
- Anaconda安装老版本tensorflow