カーネル空間で実行されるモジュール(デバイスドライバー、ミドルウェアなど)を開発する場合、操作が失敗する理由を把握する方法が必要です。
VxWorksでは、errnoメカニズムがこれを行うための良い方法のようです。
自分のerrno値を定義することは可能ですか?
VxWorks のコンテキストでは、errno は 2 つの 16 ビットとして定義されます。
公式の vxWorks モジュール値 (errno 用) は、../h/vwModNum.h ファイルにあります。彼らは現在、数百の番号を使用しています。これらのモジュール番号はすべて形式を持っています
#define M_something (nn << 16)
この (または任意の) vxWorks ヘッダー ファイルを変更しない ことを強くお勧めします。
できることは、独自のモジュール ヘッダー ファイルを作成し、競合が発生しないように十分な数から開始することです。
/* myModNum.h */ #define M_MyModule (10000 << 16) #define M_MyNextModule (10001 << 16) ...
個々のモジュール ヘッダー ファイルで、個々の errno 値を作成します。
/* myModule.h */ #define S_MyModule_OutOfResources (M_MyModule | 1) #define S_MyModule_InvalidHandle (M_MyModule | 2) ...
コード内で、定義したマクロに errno を設定できます。
Errno は単なる数値であり、strerror() などの関数は説明テキストを返します。拡張したい場合は、strerror() に似た独自の関数を提供するだけで、エラー リストを調べたり、strerror() に委譲したりできます。