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
特点:
- 数据在程序运行时不可修改。
- 节省 RAM,适用于常量数据。
- 编译器自动处理存储位置(无需手动指定地址)。
方法 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
关键注意事项:
- 只读属性
FLASH 中的数据在运行时不可修改。尝试写入会导致 HardFault 异常。 - 访问速度
FLASH 的读取速度比 RAM 慢(尤其 STM32F1 系列),频繁访问可能影响性能。 - 初始化
定义时需直接初始化(如const int x = 100;),不能在运行时赋值。 - 优化
使用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 占用率。
【STM32CubeIDE】将变量定义到指定地址
使用Keil在使用Keil编写程序的时候我们可以很轻松的将变量定义到指定地址uint8_t array[1024] __attribute__(
资料下载
佚名
2021-12-27 19:08:41
【STM32】STM32 变量存储在片内FLASH的指定位置
在这里以STM32L4R5为例(官方出的DEMO板),将变量存储在指定的片内FLASH
资料下载
佚名
2021-12-02 11:06:10
通过STM32CubeMX制作外部Flash的烧写驱动
通过STM32CubeMX制作外部Flash的烧写驱动(西安 嵌入式开发)-目前,越来越多的应用需要扩展外部的 Flash 来满足存储需求。那么
资料下载
丁冬芹
2021-07-30 11:20:59
从STM32到CONST的全局变量
STM32启动文件一文配有此图),可得出,globalConstDat的地址位于Flash memory(0x0800 0000~0x0801 ffff),其它
2021-07-23 10:50:19
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览