【STM32】STM32 变量存储在片内FLASH的指定位置

2023-05-16

在这里以STM32L4R5为例(官方出的DEMO板),将变量存储在指定的片内FLASH地址(0x081F8000)。

一、MDK Keil软件操作

uint8_t version[12] __attribute__((section(".ARM.__AT_0x081F8000")))= {0x11,0x12,0x13,0x14,0x15,0x16};
uint8_t version1[12] __attribute__((at(0x081F8010)))= {0x11,0x12,0x13,0x14,0x15,0x16};

如上图所示,采用上述方式,可以将version和version1分别存储在STM32单片机片内FLASH的0x081F8000和0x081F8010地址。

对于嵌入式系统或者单片机而言,通常会将一系列的配置文件存储在一个指定的区域(section)。也就是说,某种类型的变量存储在一个指定的区域内。在这里,就要修改STM32的链接文件了。

下图为STM32的默认链接文件配置。
STM32链接文件默认配置
修改Scatter File文件。添加下图中红框内的代码,该代码的含义是定义一个区域RW_IROM2(段属性为UNINIT_FIXED_LOC),该区域的起始地址为0x081F8000,大小为0x00008000。.ANY(UNINIT_FIXED_LOC)表示存储任何段属性为UNINIT_FIXED_LOC的数据。
在这里插入图片描述
取消1处的勾选,在2处选择自己修改过后的Scatter File。需改过后的链接文件
如此,在编程时,只需如此定义相应的数据类型。

uint8_t version2[12] __attribute__((section("UNINIT_FIXED_LOC"), zero_init));

在编译通过后,查看.map文件,可以看到0x081f8000处存储了0x0000000c大小的数据,段属性为UNINIT_FIXED_LOC
.map文件

二、IAR操作

在链接文件(.icf)中添加如下代码

define symbol __ICFEDIT_region_FIXED_LOC_start__ = 0x081F8000;
define region uninit_fixed_loc = mem:[from __ICFEDIT_region_FIXED_LOC_start__ size 32K];

place in uninit_fixed_loc  { readonly section UNINIT_FIXED_LOC };  

三、注意

该文是将变量存储在STM32片内FLASH中,故对变量进行操作时,需要按照片内FLASH的操作方式进行,即先解锁,然后修改,再加锁。

参考:
https://blog.csdn.net/qq_40888343/article/details/86223609
https://blog.csdn.net/YinShiJiaW/article/details/101466575
https://blog.csdn.net/qq_35862573/article/details/104193991

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【STM32】STM32 变量存储在片内FLASH的指定位置 的相关文章

随机推荐

  • 轻松学习CAN总线系列---3.CAN数据遵循的格式

    CAN帧 帧类型数据帧远程帧寻址CRC和应答位填充 帧类型 数据帧 xff08 Data frame xff09 为传输用户数据 xff0c ISO 11898 1定义了数据帧 数据帧可以传输的最大有效负载为八个字节 xff0c 即数据场
  • 无法解析的外部符号 "public: virtual struct CRuntimeClass

    无法解析的外部符号 34 public virtual struct CRuntimeClass thiscall CMessageBox GetRuntimeClass void const 34 以下原因是会引起上述错误的 xff1a
  • Qt控件美化 用好CSS/QSS可视化工具

    一 CSS概念 级联样式表 CSS 包含应用于网页中的元素的样式规则 CSS 样式定义元素的显示方式以及元素在页中的放置位置 可以创建一个通用规则 xff0c 只要 Web 浏览器遇到一个元素实例 xff0c 或遇到一个分配给某个特定样式类
  • c/c++中的struct和class的区别

    主要有两种情况 xff1a 1 C语言中的struct和c 43 43 中的class区别 2 c 43 43 中的struct和c 43 43 中的class的区别 下面分别介绍 xff1a 1 C语言中的struct和c 43 43 中
  • Linux应用层对串口的使用操作

    在Linux中串口作为字符设备 xff0c 设备节点在 dev 目录下 xff0c 使用普通的open xff0c close xff0c write和read等系统调用即可使用 这其中会涉及到一些串口的基本属性的设置 xff0c 如 波特
  • 给定两个字符串str1和str2,查找str2在str1中出现的位置

    给定string str1和string str2 xff0c 编写一个库函数 xff0c 返回str2在str1中的位置 如 xff1a str1为 34 ABCDLANCEXYZ 34 xff0c str2为 34 LANCE 34 x
  • 中国交通标志检测数据集

    版权声明 xff1a 本文为转发问 xff0c 原文见博客 https blog csdn net dong ma article details 84339007 中国交通标志检测数据集 xff08 CCTSDB xff09 来源于 A
  • CentOS 修改ls目录的颜色

    修改ls目录的颜色 linux系统默认目录颜色是蓝色的 xff0c 在黑背景下看不清楚 xff0c 可以通过以下2种方法修改ls查看的颜色 bash profile文件在用的根目录下 xff0c ls al可以看到 方法一 xff1a 1
  • Tiny210(S5PV210) U-BOOT(六)----DDR内存配置

    上次讲完了Nand Flash的低级初始化 xff0c 然后Nand Flash的操作主要是在board init f nand xff0c 中 xff0c 涉及到将代码从Nand Flash中copy到DDR中 xff0c 这个放到后面实
  • NAND FLASH命名规则

    基于网络的一个修订版 三星的pure nandflash xff08 就是不带其他模块只是nandflash存储芯片 xff09 的命名规则如下 xff1a 1 Memory K 2 NANDFlash 9 3 Small Classifi
  • s3c6410 DMA

    S3C6410中DMA操作步骤 xff1a 1 决定使用安全DMAC SDMAC 还是通用DMAC DMAC xff1b 2 开始相应DMAC的系统时钟 xff0c 并关闭另外一组的时钟 xff08 系统默认开启SDMA时钟 xff09 x
  • Visual Studio和VS Code的区别

    1 Visual Studio简介 xff1a 是一个集成开发环境 IDE xff0c 安装完成后就能直接用 xff0c 编译工具 xff0c 调试工具 xff0c 各个语言的开发工具 xff0c 都是已经配置好的 xff0c 开箱即用 适
  • 博客转移

    由于CSDN 文章不间断的会丢失图片 xff0c 然后逼格也不够高 xff0c 导致几年都没有写博客 xff0c 全部是记录至印象笔记中 xff0c 但是久了也不太好 xff0c 所以最近搞了一个自己的个人博客 xff0c 以后文章全部写至
  • 安装qt-everywhere-opensource-src-4.8.6

    1 下载 qt everywhere opensource src 4 8 6 http mirrors hust edu cn qtproject official releases qt 4 8 4 8 6 qt everywhere
  • CentOS6.5上安装qt-creator-opensource-linux-x86-3.1.2.run

    1 qt creator opensource linux x86 3 1 2 run的下载 wget http mirrors hustunique com qt official releases qtcreator 3 1 3 1 2
  • atoi()函数

    atoi 函数 原型 xff1a int atoi xff08 const char nptr xff09 用法 xff1a include lt stdlib h gt 功能 xff1a 将字符串转换成整型数 xff1b atoi 会扫描
  • ubuntu中printk打印信息

    1 设置vmware添加seria port 使用文件作为串口 2 启动ubuntu xff0c 修改 etc default grub GRUB CMDLINE LINUX DEFAULT 61 34 34 GRUB CMDLINE LI
  • 静态库、共享库、动态库概念?

    通常库分为 xff1a 静态库 共享库 xff0c 动态加载库 下面分别介绍 一 静态库 xff1a 1 概念 xff1a 静态库就是一些目标文件的集合 xff0c 以 a结尾 静态库在程序链接的时候使用 xff0c 链接器会将程序中使用
  • 链表——怎么写出正确的链表?

    链表 相比数组 xff0c 链表不需要一块连续的内存空间 xff0c 而是通过指针将一组零散的内存块串联起来使用 xff0c 而这里的内存块就叫做节点 xff0c 一般节点除了保存data还会保存下一个节点的地址也就是指针 单链表 头节点
  • 【STM32】STM32 变量存储在片内FLASH的指定位置

    在这里以STM32L4R5为例 xff08 官方出的DEMO板 xff09 xff0c 将变量存储在指定的片内FLASH地址 xff08 0x081F8000 xff09 一 MDK Keil软件操作 uint8 t version spa