FreeRTOS源码分析之heap1.c

来源:互联网 发布:理财 大数据 组合 编辑:程序博客网 时间:2024/06/06 04:15


首先要说清楚一点,不要看到heap就以为是从堆区分配内存。在heap1.c文件里面定义了一个configTOTAL_HEAP_SIZE大小的数组叫做ucHeap,所谓的分配空间仅仅是从ucHeap数组里面分配一块空间出来。这也表明,这块空间不在堆区,它在.bss段。


pvPortMalloc的源码如下图所示:


pvPortMalloc函数首先将xWantedSize进行字节对齐。比方说8字节对齐(即portBYTE_ALIGNMENT = 8)的情况下,你想要分配一块13字节的内存,那么下面这段代码会将xWantedSize=13转换为xWantedSize=16。


ucHeap只是个全局变量,根本不能确定它所处地址,所以也不能保证它8字节对齐。下面这段代码就是把ucHeap转化为8字节对齐,比如将本来0x60003对齐为0x60008。


最后就是从剩余的空间里面分配出一段xWantedSize大小的空间出来,并且更新已分配字节大小xNextFreeByte。


heap1只能分配空间,不能释放空间。


heap1在使用pvPortMalloc分配空间之前,要先进行初始化(即将已分配字节大小设为0)


xPortGetFreeHeapSize函数用来查看剩余空间大小


0 0
原创粉丝点击