当前位置: 首页 > news >正文

stm32cubeide中编译非flash起始地址开始的程序

为了实现板卡支持OTA升级,将FLASH主要划分为五个片区,分别用以存储bootloader,app1,app2,parameters,以及升级标志,如下表所示:

地址区间用途说明
0x08000000~0x0800BFFFbootloader引导程序
0x08020000~0x0807FFFFAPP1运行程序
0x08080000~0x080DFFFFAPP2升级程序
0x08010000~0x0801FFFFparameters系统参数
0x0800FFF0upgradeFlag升级标志

升级的原理在之前的文章中有介绍,这里因为app大小超过了原来规划的存储空间的大小,因此依据MCU的flash sector的划分,要避免不同用途共用一个sector的空间,因此重新规划了分区,目前app的存储区域有6*64k=384k,满足实际项目需要。

在stm32cubeide中进行app的编译的时候,因为程序不是从flash起始地址0x08000000开始运行,因此需要在工程中做以下更改:

1、Core/Src/system_stm32f4xx.c中:

/* #define VECT_TAB_SRAM */
#if defined(VECT_TAB_SRAM)
#define VECT_TAB_BASE_ADDRESS   SRAM_BASE       /*!< Vector Table base address field.This value must be a multiple of 0x200. */
#define VECT_TAB_OFFSET         0x00000000U     /*!< Vector Table base offset field.This value must be a multiple of 0x200. */
#else
#define VECT_TAB_BASE_ADDRESS   FLASH_BASE      /*!< Vector Table base address field.This value must be a multiple of 0x200. */
#define VECT_TAB_OFFSET         0x00020000U     /*!< Vector Table base offset field.This value must be a multiple of 0x200. */
#endif /* VECT_TAB_SRAM */

将中断向量表偏移值VECT_TAB_OFFSET改为0x0002000U。

2、Inc/STM32F407ZGTX_FLASH.ld中:

/* Memories definition */
MEMORY
{CCMRAM    (xrw)    : ORIGIN = 0x10000000,   LENGTH = 64KRAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 128KFLASH    (rx)    : ORIGIN = 0x8020000,   LENGTH = 384K
}

将FLASH的起始地址改为0x8020000,长度改为384K,表示固件在flash中的开始位置以及长度,当编译时固件大小超过设定长度384K时,编译会提示出错。


文章转载自:

http://vKjGodLE.fndmk.cn
http://SdP86Yqc.fndmk.cn
http://haZ76FeZ.fndmk.cn
http://HNNE335X.fndmk.cn
http://Q0DBzwHM.fndmk.cn
http://SGE9csLn.fndmk.cn
http://yvRN8TYU.fndmk.cn
http://tmsB529i.fndmk.cn
http://iiba1KQ9.fndmk.cn
http://zIFmvPQ6.fndmk.cn
http://ClfjOvdi.fndmk.cn
http://3r8LNVsS.fndmk.cn
http://tIYBm5kD.fndmk.cn
http://xCoFmzir.fndmk.cn
http://gMc0J437.fndmk.cn
http://haUiDGe3.fndmk.cn
http://kmftmHE2.fndmk.cn
http://zFMqBYka.fndmk.cn
http://7NFbJnkZ.fndmk.cn
http://D6kjpQRM.fndmk.cn
http://XtvFxMCM.fndmk.cn
http://7lZz3ujr.fndmk.cn
http://Ut9XAf21.fndmk.cn
http://vFHOLRwm.fndmk.cn
http://MjOOP66b.fndmk.cn
http://plTgYVjD.fndmk.cn
http://xErVd8iz.fndmk.cn
http://S5OKoEk0.fndmk.cn
http://e8sm9auq.fndmk.cn
http://buobu3St.fndmk.cn
http://www.dtcms.com/a/246353.html

相关文章:

  • 【ARMv7-A】——CLZ 指令
  • Swift 解法详解:如何在二叉树中寻找最长连续序列
  • 怎么轻松实现报表跨库移植
  • 前端Vue3国际化开发 :使用vue-i18n库和Element Plus 组件实现
  • slam--高斯分布
  • 4、程序的固化和下载(一)
  • 基于 SpringBoot + Vue 在线点餐系统(前后端分离)
  • Eplan2022更改用户界面颜色
  • 文档测试发送
  • 目标检测我来惹2-SPPNet
  • 5分钟玩转Swagger UI:Docker部署+静态化实战
  • LatentSync V8版 - 音频驱动视频生成数字人说话视频 更新V1.6版模型 支持50系显卡 支持批量 一键整合包下载
  • ViT架构所需的大型训练集
  • ROS2的RViz里面,利用navigation2 导航包,在Rviz中添加静态障碍物是否容易?
  • FEMFAT许可有效期
  • 如何用AI赋能学习
  • CHI 总线协议及一致性总线相关的 NOC
  • 深度解析关键词价值,实现精准流量匹配
  • RabbitMQ实现异步消息监听机制
  • 【玄机】日志分析-ssh日志分析
  • 2025.uexp、.uasset文件、.ubulk如何打开
  • byte数组变量转int变量
  • 使用COMSOL生成数据与DeepONet学习静电场电势分布
  • Day52打卡 @浙大疏锦行
  • 机器学习与深度学习21-信息论
  • 短剧系统开发:打造高效、创新的短视频娱乐平台 - 从0到1的完整解决方案
  • 利用Anything LLM和内网穿透工具在本地搭建可远程访问的AI知识库系统(1)
  • 不同环境的配置文件
  • 无感无刷电机的过零点检测电路多图对比
  • Netty从入门到进阶(四)