0

カーネル空間で実行されるモジュール(デバイスドライバー、ミドルウェアなど)を開発する場合、操作が失敗する理由を把握する方法が必要です。

VxWorksでは、errnoメカニズムがこれを行うための良い方法のようです。

自分のerrno値を定義することは可能ですか?

4

2 に答える 2

2

VxWorks のコンテキストでは、errno は 2 つの 16 ビットとして定義されます。

  • 上位 16 ビットは、エラーが発生した「モジュール」を識別します。
  • 下位 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 を設定できます。

于 2008-09-24T17:48:52.637 に答える
1

Errno は単なる数値であり、strerror() などの関数は説明テキストを返します。拡張したい場合は、strerror() に似た独自の関数を提供するだけで、エラー リストを調べたり、strerror() に委譲したりできます。

于 2008-09-24T17:46:12.127 に答える