嵌入式编程中的zalloc是什么?

ARF*_*ARF 5 c embedded esp8266

我正在研究编程ESP8266串行wifi芯片.在其SDK示例中,它广泛使用了os_zalloc我期望的函数malloc.

偶尔也os_malloc可以使用.所以它们在功能上似乎没有相同之处.

不幸的是没有文件.任何人都可以从以下头文件中做出有根据的猜测吗?

#ifndef __MEM_H__
#define __MEM_H__

//void *pvPortMalloc( size_t xWantedSize );
//void vPortFree( void *pv );
//void *pvPortZalloc(size_t size);

#define os_malloc   pvPortMalloc
#define os_free     vPortFree
#define os_zalloc   pvPortZalloc

#endif
Run Code Online (Sandbox Code Playgroud)

Cli*_*ord 7

既然os_zalloc是一个宏,并且在mem.h中给出了定义,那么问一个更好的问题是什么pvPortZalloc.

给定函数名称pvPortMalloc,vPortFree并且pvPortZalloc看起来正在使用的操作系统是FreeRTOS(或者它是商业许可的等效OpenRTOS),这是记录在案的 - 虽然不是特别说明pvPortZalloc,但如果它不是简单的分配和零初始化则会很奇怪- 这是例如,这意味着什么在这里.这些函数是FreeRTOS的目标移植层的一部分,通常不会被应用程序级调用,但我想这里宏包装器用于访问应用程序用户的移植层代码而不是写两次.

在RTOS内核中,需要RTOS感知动态内存分配函数来确保线程安全,尽管一些标准库实现包含使用RTOS互斥调用实现的线程安全存根,这是一种更好的方法,因为现有的库和C++ new/ delete可以更容易用过的.


gen*_*ave 5

我会说“分配内存并用零填充”

  • 这听起来像是一个合理的猜测。还不止这些吗?如果没有,我建议它应该是评论而不是答案。 (2认同)