[FreeRTOS] 堆和栈的基本概念&在FreeRTOS中的使用
1.0 堆
1.1 基本概念
堆的本质是在 RAM 中的一段连续的内存区域,开发者可以主动申请一些内存块,其中与栈不同的是,堆的声明周期是完全由程序员进行控制的。
1.2 堆的管理机制
- 动态性
- 碎片化风险
- 手动管理
1.3 例子
在 C/C++ 中,定义一个变量时,其存储位置取决于其定义位置上下文:
- 如果在函数内定义,则其存储在栈中。
- 若在全局或静态作用域定义,则存储在静态存储区。
真正的堆内存必须通过动态分配函数进行显示申请。
char heap_buf[1024]; // 若在函数内进行申请,则存储在栈中,函数结束后自动释放
-
char* heap_buf = (char*)malloc(1024); // 显式申请堆内存
2.0 栈
2.1 基本概念
栈是一种先进后出的数据结构,其基本操作通常包括:压栈和弹栈。
2.2 栈的特点
- 后进先出 (LIFO)
- 高效性
- 有限容量 (固定大小栈)
- 自动管理:在嵌入式系统中,函数调用时使用的栈由编译器和处理器自动管理,无需程序员手动干预。
3.0 RTOS 如何使用栈
END 参考 & 声明
[参考]
- FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOS(FreeRTOS教程 基于STM32,以实际项目为导向) -> BV1Jw411i7Fz
本文部分内容由 Ai 辅助生成
评论区(暂无评论)