我正在研究对 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
Since os_zalloc
是一个宏,定义在 mem.h 中给出,更好的问题是关于什么pvPortZalloc
does.
给定函数名称pvPortMalloc
, vPortFree
and pvPortZalloc
看起来正在使用的操作系统是 FreeRTOS(或其商业许可的等效 OpenRTOS),该操作系统已记录在案 - 尽管没有具体说明pvPortZalloc
,但如果不简单的话那就奇怪了分配和零初始化- 例如,这就是它的意思here http://w1.fi/wpa_supplicant/devel/os_8h.html#aa3941c5693466d194ef568dfe2f299e6。这些函数是 FreeRTOS 目标移植层的一部分,通常不会由应用程序级别调用,但我想这里宏包装器用于访问应用程序用户的移植层代码,而不是编写两次。
在 RTOS 内核中,需要 RTOS 感知的动态内存分配函数来确保线程安全,尽管某些标准库实现包括使用 RTOS 互斥调用实现的线程安全存根,这是自现有库和 C++ 以来更好的方法new
/delete
可以更方便地使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)