登录/注册

STM32减少RAM的占用

STM32减少RAM的占用

更多

在STM32开发中减少RAM占用是优化资源的关键目标。以下是针对性的中文优化策略(附代码示例):

1. 精简数据类型

优先使用小尺寸数据类型:

// 避免:
int counter;  // 默认32位(4字节)
// 推荐:
uint8_t counter; // 1字节(范围0-255)
uint16_t buffer_size; // 2字节(范围0-65535)

2. 启用编译器优化

在IDE(如Keil)中:

3. 常量数据存Flash

使用 const 强制存Flash:

const uint8_t FONT_DATA[1024] = { ... }; // 存在Flash(节省1KB RAM)

4. 优化全局变量

5. 结构体优化

对齐优化(节省填充字节)

// 优化前(占用12字节):
struct {
    uint32_t a; // 4B
    uint8_t b;  // 1B → +3B填充
    uint32_t c; // 4B
} BadStruct;

// 优化后(占用8字节):
struct __attribute__((packed)) { // 取消填充
    uint32_t a; // 4B
    uint8_t b;  // 1B
    uint32_t c; // 4B
} GoodStruct; 

位域压缩布尔值

struct {
    uint8_t flag1 : 1; // 1位
    uint8_t flag2 : 1; // 1位
} flags; // 总大小1字节(代替8个bool)

6. 栈与堆配置

修改启动文件(如 startup_stm32fxxx.s):

Heap_Size   EQU     0x200  ; 原1KB堆 → 改为512字节
Stack_Size  EQU     0x400  ; 原2KB栈 → 改为1KB

7. 复用缓冲区

避免冗余内存分配:

static uint8_t shared_buffer[128]; // 静态共享缓冲区

void Task1() {
    memset(shared_buffer, 0, 128);
    // 使用缓冲区...
}

void Task2() {
    // 同一缓冲区被复用
    memcpy(shared_buffer, data, 128);
}

8. 动态内存替代方案

避免 malloc

9. 链接脚本优化

自定义 STM32Fxxx_FLASH.ld

MEMORY {
    RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 16K  /* 明确RAM边界 */
}

/* 将不常用的段移到特定区域 */
.slow_section (NOLOAD) : {
    *(.slow_data)
} > RAM

10. 关键工具

11. 禁用未使用外设

CubeMX 配置中:

12. 算法优化


执行顺序建议

  1. 用Map文件定位RAM消耗大户
  2. 优先优化全局数组和结构体
  3. 调整栈/堆尺寸
  4. 启用编译器优化
  5. 复用缓冲区

? 注意:优化后需严格测试栈溢出(通过填充 0xAA 模式并监测溢出标记)。

如何显著减少PCB占用空间

要监视更多的传感器。本文将讨论如何显著减少PCB占用空间,增加通道密度以及最大限度地发挥其他组件和功能与TI微型数据转换器高度集成的优势,从而以更小的尺寸创造更多的价值。第一个优点:PCB

2022-11-09 06:13:10

NVIDIA发布NeuralVDB 可将内存占用减少高达100倍

NeuralVDB 可将烟雾、云和其他稀疏体积数据的内存占用量减少多达 100 倍。

2022-08-14 10:58:08

如何查看STM32程序占用的ROM和RAM

如何查看STM32程序占用的ROM和RAM?

2022-02-16 06:17:19

STM32:查看程序占用ROM和RAM

) Total RW Size (RW Data + ZI Data) 14120 ( 13.79kB) **-->RAM**Total RO...

资料下载 佚名 2021-12-20 19:17:24

stm32 FATFS文件系统如何减少Flash和RAM占用,FATFS移除中文文件名,FATFS移除动态内存

FATFS减少flash和ram的占用

资料下载 微风挽雨 2021-12-08 14:21:10

(转)深入分析STM32单片机的RAM和FLASH

(转)深入分析STM32单片机的RAM和FLASH

资料下载 mintsy 2021-12-02 11:51:14

keil编译之后占用flash、ram大小

keil编译之后占用flash、ram大小

资料下载 王毅山 2021-12-02 11:06:10

IAR for STM8 如何查看程序占用flash和RAM的大小

,这款mcu的Flash为8K字节,RAM为1K字节。IAR for STM如何查看占用空间大小在Build窗口右击,选择“All”。编程链接后,出现如图的信息。其中,7306 字节的readonly code me

资料下载 48674 2021-12-02 09:21:09

FATFS是如何减少flash和ram占用

FATFS减少flash和ram的占用

2022-02-11 07:54:00

如何计算STM32程序占用的内存容量

STM32中程序占用内存容量Keil MDK下Code, RO-data,RW-data,ZI-data这几个段:Code存储程序代码。RO-data存储const常量和指令。RW-data存储

2022-01-11 06:05:01

如何显著减少PCB占用空间?

随着系统尺寸越来越小,每平方毫米的印刷电路板(PCB)面积都至关重要。与此同时,随着对数据需求的增加,则需要监视更多的传感器。 本文将讨论如何显著减少PCB占用空间,增加通道密度以及最大限度地发挥其他组件和功能与TI

2021-01-19 06:41:35

FreeRTOS如何减少RAM占用空间并加快执行速度?

之前分享了《FreeRTOS V10.4.0更新了哪些功能?》,今天就来详细讲述其中的一个知识点:FreeRTOS的直接任务(消息)通知,这样做的目的就是减少RAM

2020-10-14 14:52:49

用CCS编译工程如何知道占用多少RAM,ROM,FLASH

用CCS编译的工程如何知道占用多少RAM,ROM,FLASH?

2020-07-31 09:45:17

请问邮箱什么时候占用RAM和释放RAM

ucosii启动两个任务分别在不同的.c中,两个任务通过邮箱传递数据,uCOSII消息邮箱的变量为.c局部静态变量,求教邮箱什么时候占用RAM和释放RAM

2019-10-25 00:02:30

怎么去掉程序里的外部RAM让程序占用RAM减小?

编绎显示占用了接近400K的RAM,关于动态内存管理我不怎么明白,程序里初始化了三块RAM,但好像外部的内存池在程序里没用到我现在要把原子的例程

2019-07-24 04:35:49
7天热门专题 换一换
相关标签