前のquestionの回答に基づいて、ここに私の埋め込みCアプリケーション用の単純なエラー報告システムのためのデザインがあります。私はいくつかのフィードバックを感謝します。これは埋め込みCアプリケーションのための良いエラー報告ソリューションですか?
私のアプリには、全体的なプログラムといくつかの下位レベルライブラリの層が形成されたコードがあります。最下位レベルでは、ライブラリはエラーコードに使用するバイトを取得します。そのため、合計255のエラーが発生します。彼らは同様に、列挙型でエンコードされます:
unsigned char lib1ErrNo;
次のより高いレベルは、それが使用するライブラリのエラーコードが含まれています。これは、グローバル変数を介してチェーンのどちらかを渡され
enum lib1ErrorCodes {
ERR_NO_ERROR,
ERR_NO_CONNECTION,
...
ERR_MISC
};
:
enum lib2ErrorCodes {
ERR_NO_ERROR,
ERR_LIB1,
ERR_FILE_EXISTS,
...
ERR_MISC
}
LIB1のエラーが検出され、このレベルのエラー変数にフラグが立てられている:
それは、ユーザーにこのすべてを報告するための時間になったときに、これらが検出されたトップレベルで:
if (lib3ErrNo == ERR_LIB2)
if (lib2ErrNo == ERR_LIB1)
printf("Error %d: %s", lib1ErrNo, lib1ErrDesc);
私はこの方式で考えることができる唯一のネガはさておき、数を設定する必要がありますそのライブラリの下にあるライブラリを指し示すためのエラーコードと、エラーコードのこれらのレベルをすべて含む最上位のプログラムのためのものです。
これを行うには適切な方法はありますか?
私がしたい:すべての方法のトップレベルまで
- ユニークな誤差伝播をので、私はそれを報告することができます。
- 埋め込まれたアプリであるため、大きな構造物を避けて移動することは好ましくありません。あなたの例では、両方の
ERR_NO_CONNECTION
とERR_LIB1
1の値を持っている - -
私はこのシステムの下でどのライブラリがどのエラー範囲を取得するのかを積極的に管理する必要があると思いますか? 私が制御できないサードパーティのライブラリはどうですか? – jparker
あなたは正しいと思います。サードパーティのライブラリについては、それぞれ独自のロジックを持っていると思います。 – mouviciel
この戦略に対するポイントは、モジュール間に隠れた依存関係を作成することです。カップリングを最小にする、と私は言う。 –