優れた組み込みソフトウェアアーキテクトが、異なるCファイルモジュールが異なるアーキテクチャレベルにある場合に、コードの同じ部分を異なるCファイルモジュールで使用するための最良のオプションをどのように選択するかを知りたいです。
すべてのモジュールは、内部関数と外部関数を含むfile.cであり、対応する.hファイルにはパブリック関数宣言があります。
私は1)低レベルのモジュール、2)中レベルのモジュール、3)高レベルのモジュール、4)アプリレベルのモジュールを持っています。4)呼び出し3)関数、3)呼び出し2)関数など。
しかし、1)、2)、および3)関数のいくつかが、ルーチンの異なるポイントで同じ命令を実行していることに気付きました。一部の1)ルーチンのコードの一部が一部の2)および3)モジュールのルーチンにも存在する場合、優れた効率的なコードアーキテクチャ設計を行うための最良のオプションは何ですか?
私の最初の考えは、命令セットをpublic function_xにパックし、上位レベルのモジュール関数に対して呼び出されるようにヘッダーファイルで宣言することです。建築家として私は学びました:
事実、私は古いプロジェクトを継承しており、シリアルバスを介してポテンショメータにバイトを送信するデジタル出力でバイトを書き込みました。しかし、それらはすべてのモジュール/ファイルで内部関数と同じ名前で同じ関数を実装して宣言しています。また、他のルーチン内でこのコードを書き直していることに気付いたときもあります。代わりに、ルーチンを呼び出すだけです。改善できると思いました。
だから、私の疑問は次のとおりです。
1)モジュールレベルで関数に設定された命令をパックし、残りのレベルのモジュールから呼び出されるように設計するのは良いですか?
2)レベルモジュールが1)レベルモジュール関数もパックして、別の名前を付け、それをAPIヘッダーに持ってきて、3レベルモジュール関数で使用できるようにする場合は、より良い考えですか?
別のモジュールでもコードを使用しているが、それらが同じモジュールレベルに属している場合はどうすればよいですか?
同じ関数を内部関数として使用する必要があり、同時に他のファイルからパブリック関数として呼び出す必要がある場合、どのように設計に直面しますか。
いくつかのヒントと経験(決定的な答えではありません)。
ユーティリティ関数は、1つ以上のソースレベルの「ライブラリ」Cファイルにパックできます。これらはユーティリティであるため、ハードウェア固有ではなく、反復的なタスクのみを実装します。たとえばstrcmp
、効用関数です。これらを、開発者/チームに配布できる真のオブジェクトライブラリとして提供することもできます。
データ構造とその操作は、独自のモジュール(Cファイル)に実装できます。たとえば、Btreeまたはリンクリスト。
ハードウェア固有の機能は、「レベル1」の低レベル機能です。これらはAPIを提供し、誰もハードウェアを直接操作することはできません。このAPIを介してのみ。APIを「スタック」して、より多くの抽象化を提供できますが、これは、それ自体が複数のレベルで構成される「レベル1」の設計としても見ることができます。
アプリレベルのコーディングでは、前述のすべてを使用します。
あなたのレベルで独断的になりすぎないでください。必要に応じて、高レベルの関数は、中間レベルを通過することを強制せずに、低レベルの関数を直接呼び出すことができます。クリーンな上から下への設計は、多くの場合、実現が非常に困難です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加