内存堆
Zephyr提供了一组允许线程动态分配内存。
同步堆分配器
创建Heap
定义堆的最简单的方法是静态的,使用K_HEAP_DEFINE
宏。这将创建一个具有给定名称的静态k_heap
变量,该变量可管理指定大小的内存区域。
还可以使用k_heap_init()
创建堆来管理应用程序控制的内存的任意区域。
分配内存
可以使用k_heap_alloc()
从堆中分配内存,并向其传递堆对象的地址和所需的字节数。这个功能类似于标准的Cmalloc()
,在分配失败时返回一个NULL
指针。
堆支持阻塞操作,允许线程进入休眠状态,直到内存可用为止。最后一个参数是一个k_timeout_t
超时值,指示线程在返回之前的休眠时间,或者是其中一个常量超时值K_NO_WAIT
或K_FOREVER
。
释放内存
使用k_heap_alloc()
分配的内存必须使用k_heap_free()
进行释放。与标准的free()
类似,所提供的指针必须是NULL
值或k_heap_alloc()
之前为同一堆返回的指针。释放NULL
值被定义为无效。
底层堆分配器
k_heap
抽象的底层实现提供了一个名为sys_heap
的数据结构。这实现了完全相同的