FreeRTOS系统下通常可用的动态内存管理接口有:
malloc和pvPortMalloc两个。在使用时略有区别。
malloc是c标志库提供的库函数,头文件:<stdlib.h>,功能是在堆内存中动态分配一块空间
使用malloc申请内存空间需要注意
1.使用前先调用malloc init函数数进行内存堆初始化
2.使用malloc时注意内存堆剩余空间是否足够,不够返回NULL,申请空间过大会导致内存溢出
3.使用malloc申请内存空间后,调用free函数释放内存
4.若申请的内存空间不存在/超出可用内存空间范围将崩溃
5.malloc可用空间大小在初始化时定义,通常在系统的heap_size定义。
freeRTOS动态内存分配
在freeRTOS中,通常使用pvPortMalloc动态内存分配
1.pvPortMalloc: 这是freeRTOS提供的内存分配函数,类似于标准C库中的malloc函数。它从内存堆中分配内存块。
2vPortFree: 这是freeRTOS提供的内存释放函数,类似于标准C库中的free函数。它将已分配的内存块释放回内存堆.
pvPortMalloc和malloc区别
pvPortMalloc是FreeRTOS内核提供的内存分配函数,它和malloc函数有一些不同,包括:
1.pvPortMalloc是线程安全的,而malloc不是,这意味着pPortMalloc可以在多线程环境下使用,而malloc可能会引起竞争条件.
2.pvPortMalloc通常比malloc慢一些,这是因为pvPortMalloc需要调用内部的斥体保护内存池的访问,而malloc不需要。
3. pvPortMalloc可以根据需要动态地分配内存,而malloc则只能分配在堆上的内存。
4.pvPortMalloc可以用来在内存不足的情况下触发内存溢出处理函数。而malloc则无法这样做
5.pvPortMaloc是一个特珠的内存分配函数,适用于FreeRTOS内核,用于在多线程环境下分配内存。如果使用FreeRTOS,也可以继续使用malloc,但是不推荐.
6.在freertos使用pvPortMaloc,可以通过xPortGetFreeHeapSize ()获取剩余可用动态内存大小,但是c库提供的malloc不支持查询剩余可用动态内存大小,如果需要获取可以再其之上进行封装获取。