关于freertos的heap1

来源:互联网 发布:ios 网络协议 编辑:程序博客网 时间:2024/06/07 19:35

为什么 程序中要用heap?

主要是为了想分配多少内存就分配多少,预先的需求有时候是不知道的,那么如果不用heap只能按照最大的内存预先定义出来,是个巨大的浪费,有时候内存就捉襟见肘了。所以就用heap了。

那么为什么要选heap1?不选heap2和heap3呢?

因为heap1最简单,容易看懂。不容易出问题。

---------------------------

(1)heap1中STM32对应的字节对齐(portBYTE_ALIGNMENT)选择几呢?我认为是选择4个字节对齐。因为通过STM32的编译器结果发现对于数组的对齐都是放在4的整数倍上的,如果定义的数组字节长度不是4的整数倍,那么编译器会自动填充,看生成的内存map就看出来了,填充显示的是PAD。

(2)关于#define configADJUSTED_HEAP_SIZE( configTOTAL_HEAP_SIZE - portBYTE_ALIGNMENT )为啥这样宏定义?或者换个问法就是为什么首次要从ucHeap[ portBYTE_ALIGNMENT ]开始呢?

这个问题博客http://blog.csdn.net/u014381531/article/details/38623641讲了这个问题。

这里再弄个例子讲一讲。比如把portBYTE_ALIGNMENT_MASK设置为8,用ucHeap[ 0 ],


看到了吧,pucAlignedHeap的值竟然不在数组ucHeap的地址范围内了。


原创粉丝点击