登录/注册

STM32变量定义在FLASH

STM32变量定义在FLASH

更多

在 STM32 中,将变量定义在 FLASH(只读存储器) 而非 RAM 中,通常用于存储 常量数据(如配置参数、查找表、字符串等),以节省宝贵的 RAM 空间。以下是实现方法:


方法 1:使用 const 关键字(推荐)

在变量前添加 const 关键字,编译器会自动将其分配到 FLASH 的只读数据段(.rodata)。

// 定义在 FLASH 中的常量(不可修改)
const uint32_t myArray[] = {0x12345678, 0x87654321}; // 存储在 FLASH
const char myString[] = "Hello from FLASH!";         // 存储在 FLASH

特点


方法 2:使用编译器扩展(特定编译器)

某些编译器(如 IAR)支持显式指定存储位置:

// IAR 编译器示例
__flash const uint8_t lookupTable[256] = { ... }; // 显式分配到 FLASH

注意:GCC(如 STM32CubeIDE)通常只需 const 即可。


方法 3:自定义链接脚本(高级)

通过修改链接脚本(.ld 文件),强制将变量分配到 FLASH 地址:

/* 在代码中定义变量(无初始化值) */
volatile const uint32_t __attribute__((section(".my_flash_section"))) flashVar;

/* 在链接脚本 .ld 文件中分配段到 FLASH */
.my_flash_section :
{
  . = ALIGN(4);
  *(.my_flash_section)  // 将段放入 FLASH
  . = ALIGN(4);
} > FLASH

关键注意事项:

  1. 只读属性
    FLASH 中的数据在运行时不可修改。尝试写入会导致 HardFault 异常
  2. 访问速度
    FLASH 的读取速度比 RAM 慢(尤其 STM32F1 系列),频繁访问可能影响性能。
  3. 初始化
    定义时需直接初始化(如 const int x = 100;),不能在运行时赋值。
  4. 优化
    使用 const 有助于编译器优化代码。

示例场景

// 查找表(占用 1KB FLASH 空间,节省 1KB RAM)
const uint16_t sineLookup[512] = {0, 804, 1608, ...}; // 存储在 FLASH

void main() {
    // 正确:读取 FLASH 数据
    uint16_t value = sineLookup[42]; 

    // 错误:尝试写入 FLASH(将触发异常)
    // sineLookup[0] = 100; 
}

通过合理利用 FLASH 存储常量数据,可显著降低 STM32 项目的 RAM 占用率。

stm32变量能存进flash中吗

当涉及到将变量存储在Flash中时,我们通常指的是将变量存储

2023-12-28 15:33:33

变量的声明和定义有什么区别和联系

变量的声明和定义是编程中的两个重要概念,它们在语法和语义上有一些区别和联系。在

2023-12-07 16:14:25

oracle sql 定义变量并赋值

在Oracle SQL中,变量是用来存储数据值的标识符。通过定义和使用变量

2023-12-06 10:46:32

STM32CubeIDE】将变量定义到指定地址

使用Keil在使用Keil编写程序的时候我们可以很轻松的将变量定义到指定地址uint8_t array[1024] __attribute__(

资料下载 佚名 2021-12-27 19:08:41

STM32STM32 变量存储片内FLASH的指定位置

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

资料下载 佚名 2021-12-02 11:06:10

关于STM32FLASH程序(超实用)

关于STM32的FLASH程序(超实用)(嵌入式开发应用培训)-关于STM32的FLA

资料下载 李鸿洋 2021-08-04 12:03:31

STM32F4内部Flash实验例程

STM32F4内部Flash实验例程(嵌入式开发版哪个好)-STM32F4内部Flas

资料下载 无人岛 2021-07-30 15:58:01

通过STM32CubeMX制作外部Flash的烧写驱动

通过STM32CubeMX制作外部Flash的烧写驱动(西安 嵌入式开发)-目前,越来越多的应用需要扩展外部的 Flash 来满足存储需求。那么

资料下载 丁冬芹 2021-07-30 11:20:59

C语言如何定义结构体类型变量

在定义了结构体变量后,系统会为之分配内存单元。根据结构体类型中包含的成员情况,在

2023-03-10 15:35:40

MuonRiber studio中怎么把变量定义指定地址?

MuonRiber studio中我怎么把变量定义在指定地址,或是怎么把变量

2022-09-14 06:36:09

STM32 __IO的变量定义是什么意思?

STM32 __IO的变量定义是什么意思?

2021-11-25 08:51:53

stm32变量定义是什么

stm32变量定义不需要自己定义,库函数中有声明 (

2021-08-23 08:45:26

STM32到CONST的全局变量

STM32启动文件一文配有此图),可得出,globalConstDat的地址位于Flash memory(0x0800 0000~0x0801 ffff),其它

2021-07-23 10:50:19

西门子PLC变量表中定义变量

什么是变量? 变量是用于程序的,可以有不同值的变量。  根据应用范围,变量

2020-12-23 16:25:06

请问stm32flash变量怎么定义

请问: 怎样将变量定义到flash

2020-04-01 04:07:37
7天热门专题 换一换
相关标签