关于freertos的heap1

为什么 程序中要用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的地址范围内了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值