1. ホーム
  2. c

[解決済み] 組み込みプログラミングにおけるzallocとは何ですか?

2022-03-01 20:22:06

質問

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

解決方法は?

以来 os_zalloc はマクロであり、mem.h で定義されています。 pvPortZalloc があります。

関数名 pvPortMalloc , vPortFreepvPortZalloc を見ると、使用されている OS は FreeRTOS (または商用ライセンスの OpenRTOS) のようで、具体的には書かれていませんが pvPortZalloc が、単に アロケートとゼロ初期化 - というのは、例えば次のような意味です。 これ . この関数はFreeRTOSのターゲット移植層の一部であり、通常アプリケーションレベルでは呼び出されませんが、ここではマクロラッパーを使って移植層のコードを二重に書かずにアプリケーションユーザがアクセスできるようにしていると想像されます。

RTOSカーネルでは、スレッドセーフを確保するためにRTOSを意識した動的メモリ割り当て関数が必要ですが、標準ライブラリ実装の中には、RTOSのミューテックス呼び出しを使用して実装するスレッドセーフスタブがあり、これは既存のライブラリやC++を使用しているのでより良い方法です。 new / delete をより簡単に使用することができます。