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

What is zalloc in embedded programming?

我正在研究 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

我会说"allocate memory and fill with zeros"

由于 os_zalloc 是一个宏,并且在 mem.h 中给出了定义,因此更好的问题是 pvPortZalloc 的作用。

鉴于函数名称 pvPortMallocvPortFreepvPortZalloc,使用中的 OS 似乎是 FreeRTOS(或者它已获得商业许可等效的 OpenRTOS),它被记录在案 - 虽然不是特别 pvPortZalloc,但如果它不是简单的 allocate 和零初始化 那就很奇怪了 - 那是为了例如它的意思 here。这些函数是 FreeRTOS 的目标移植层的一部分,通常不会被应用程序级别调用,但我想这里宏包装器用于为应用程序用户访问移植层代码而不是编写两次.

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