FreeRTOS内存分配与STM32内存布局详解

目录

[0. 书接上文](#0. 书接上文)

[1. FreeRTOS 中的内存分配](#1. FreeRTOS 中的内存分配)

[FLASH 内存分配](#FLASH 内存分配)

[SRAM 内存分配](#SRAM 内存分配)

[FreeRTOS 的任务内存分配](#FreeRTOS 的任务内存分配)

任务上下文切换

关键点总结

[2. 通过.map文件查看.text/.data/.bss段地址](#2. 通过.map文件查看.text/.data/.bss段地址)

.map文件打开方法和.map文件解析

在.map文件中查看.text/.data/.bss段的起始位置

[.text 段](#.text 段)

[.data 段](#.data 段)

[.bss 段](#.bss 段)

堆和栈


0. 书接上文

STM32中的Flash、ROM与RAM全解析

通过前文我们可以了解到STM32中的Flash、ROM与RAM,以及上面的内存分配(.bss/.data/.text段),这篇我们讲一下FreeRTOS中的内存分配。

1. FreeRTOS 中的内存分配

FLASH 内存分配

SRAM 内存分配

勘误一下:上图的 STACK_SIZE 栈大小应该为 1Kbytes

FreeRTOS 的任务内存分配

heap4 方案本质就是开了一个未初始化的大数组,所以 FreeRTOS 的任务栈都在 .bss 段:

任务上下文切换

关键点总结

  1. data段的数据会在flash中保存,在系统运行时,拷贝到sram的data段。

  2. freertos的堆空间被分配在sram的bss段(在heap4.c中创建一个大数组),freertos的任务栈、任务控制块、队列等资源的内存空间都在这里被分配;pvmalloc在这里分配内存;psp进程栈指针在这个区域偏移,处理os的栈。

  3. 单片机的堆空间被分配在sram的堆区域(在启动文件中定义大小,在单片机启动过程初始化),malloc在这里分配内存。

  4. 单片机的栈空间被分配在sram的栈区域(在启动文件中定义大小,在单片机启动过程初始化),msp主栈指针在这个区域偏移,处理单片机系统的栈。

2. 通过.map文件查看.text/.data/.bss段地址

.map文件打开方法和.map文件解析

Keil5----打开map文件方法和map文件解析_.map文件怎么打开-CSDN博客

在.map文件中查看.text/.data/.bss段的起始位置

.text 段

.data 段

.bss 段

堆和栈

相关推荐
BackCatK Chen7 小时前
第 8 篇:TMC2240 电机正反转实现|DIR 引脚控制 + 代码优化(稳定不抖动)
stm32·单片机·嵌入式硬件·保姆级教程·电机正反转·tmc2240·dir引脚控制
星马梦缘7 小时前
EDA彩灯电路绘制
单片机·嵌入式硬件·物联网·pcb·eda·嘉立创
番茄灭世神9 小时前
Linux应用编程介绍
linux·嵌入式
Forsete9 小时前
LINUX驱动开发#9——定时器
linux·驱动开发·单片机
Hello_Embed12 小时前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
来自晴朗的明天14 小时前
14、光耦隔离电路(EL3H7)
单片机·嵌入式硬件·硬件工程
G***技14 小时前
杰和IB3-272:以低功耗高性能打造新一代工业智能交互核心
单片机·嵌入式硬件·物联网
czhaii15 小时前
STC AI8052U单片机特点
单片机
MAR-Sky16 小时前
keil5中数据的不同定义和单片机(以stc8为例)里的对应关系(idata,xdata,data,code)
单片机·嵌入式硬件
项目題供诗17 小时前
51单片机入门(八)
单片机·嵌入式硬件·51单片机