打印
[经验分享]

单片机堆栈说明与全局变量和局部变量的存储位置

[复制链接]
141|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alvpeg|  楼主 | 2024-9-26 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
全局变量存储在静态区。

局部变量,以及形参,返回值等存储在栈中,由编译器自动分配和释放。

动态申请的内存,如malloc函数或new函数申请的存储与堆中。

程序代码下载存储在FLASH中,一些常量也存在这里。

单片机“系统堆、栈”分配

在FreeRTOS开发时,需要为每个任务分配一定的内存,作为“任务桟”,用来保存各个任务切换时的上下文环境。这里的“任务桟”并不是上述的“系统栈”,这段内存实际上可能位于静态区(静态分配的内存)或者堆中(动态分配的内存)。

FreeRTOS共支持6种内存管理方法(内存分配与释放方法),在STM32CubeMX软件生成的Keil工程中默认使用heap_4c.c文件定义的方法,这个方法实际上就是定义了一个大的数组(静态全局变量,存储在静态区),任务桟的内存都是从这个大数组中分出去的。另一种方法heap_3c.c文件定义的方法是使用malloc函数从堆中分配出内存(动态分配)。此处所说的堆即为图一、图二中的heap_size。需要注意的是,动态分配的内存大小一定不能超过了图一中设置的堆大小,否则申请失败。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

1400

帖子

0

粉丝