heap_1 内存分配方法 动 态 内 存 分 配 需 要 一 个 内 存 堆 , freertos 中 的 内 存 堆 为 ucheap[] , 大 小 为configtotal_heap_size,这个前面讲 freertos 配置的时候就讲过了。不管是哪种内存分配方法,它们的内存堆都为 ucheap[],而且大小都是 configtotal_heap_size。内存堆在文件heap_x.c(x 为 1~5)中定义的,比如 heap_1.c 文件就有如下定义:
#if( configapplication_allocated_heap == 1 )
extern
uint8_t
ucheap[ configtotal_heap_size ];
//需要用户自行定义内存堆
#else
static
uint8_t
ucheap[ configtotal_heap_size ];
//编译器决定
#endif
当宏 configapplication_allocated_heap 为 1 的时候需要用户自行定义内存堆,否则的话由编译器来决定,默认都是由编译器来决定的。如果自己定义的话就可以将内存堆定义到外部 sram 或者 sdram 中。
heap_1 实现起来就是当需要 ram 的时候就从一个大数组(内存堆)中分一小块出来,大数组(内存堆)的容量为 configtotal_heap_size。使用函数 xportgetfreeheapsize() 可以获取内存堆中剩余内存大小。
heap_1 特性如下:
1、适用于那些一旦创建好任务、信号量和队列就再也不会删除的应用,实际上大多数的 freertos 应用都是这样的。
2、具有可确定性(执行所花费的时间大多数都是一样的),而且不会导致内存碎片。
3、代码实现和内存分配过程都非常简单,内存是从一个静态数组中分配到的,也就是适合于那些不需要动态内存分配的应用。
如果使用 heap_1,一旦申请内存成功就不允许释放!但是 heap_1 的内存分配过程简单,如此看来 heap_1 似乎毫无任何使用价值啊。千万不能这么想,有很多小型的应用在系统一开始就创建好任务、信号量或队列等,在程序运行的整个过程这些任务和内核对象都不会删除,那么这个时候使用 heap_1 就很合适的。
TDK推出0402尺寸高Q特性的薄膜电容器Z-match TFSQ0402系列
TDK CAN FD用共模滤波器实现更大容量数据的高速通信
连云港利用“5G手机摄像头”使移动5G覆盖海头镇码头
工业领域内主要应用的电机产品对比分析
PCB电路板小常识,你知道的有多少呢?
heap_1内存分配方法
电磁炉电路板如何维修
华为手机惨遭美运营商AT&T抛弃 原因成谜
什么是整洁的代码
虹晶科技获ARM多核心处理器Cortex A系列授权
哪款蓝牙耳机外观比较时尚?性价比高的四款蓝牙耳机测评
半年收入过千亿,华为手机的成功之道
5G技术如何改革视频监控行业
【干货分享】MLCC电容啸叫的4个对策
泄漏电流测试仪的使用方法及操作要求
直流接触器与直流继电器的区别
Windows系统中的FTP客户端如何与FTP服务器下载或者上传文件
人工智能借力汽车增长 英伟达赌对了
Xilinx在2012年WED和下一代光网络大会上展示其All Programmable OTN解决方案
Socionext为本土客户开发高性能处理器芯片