私は自分の PC ブリッジに Teensy++ 2.0 を使用して基本的な EEPROM バーナーを自作しました。うまく機能していますが、互換性を拡張しようとすると、私のコードはかなりハッキリしています。このコードを拡張可能にするための適切な設計についてのアドバイスを探しています。ソフトウェアデザインパターンの授業を受けたことがありますが、それは少し前のことで、現在空白を描いています。基本的に、使用例は次のとおりです。
ReadByte()、WriteByte()、ProgramByte() (プログラムするためにマルチバイト書き込みシーケンスを必要とする FlashROM 用)、EraseChip() などのいくつかのメソッドがあるので、基本的には EEPROM の純粋な仮想ベースがあります。サポートしたい各チップタイプの具象クラスによって実装されるクラス。注意が必要な部分は、生成するチップ タイプ オブジェクトを決定することです。私は現在、Teensy++シリアル入力で疑似端末フロントエンドを使用しています。これは、パラメーターを備えた基本的なコマンドラインタイプのインターフェイスであり、チップタイプなどのオプションをTeensy++に送信します。問題は、ファクトリ パターンのようなデザイン パターン (C/C++) があり、チップ タイプの文字列入力を受け取り (ユーザーから取得しているため)、EEPROM オブジェクトを返すかどうかです。正しい派生型の、新しいチップ派生クラスを作成するたびに新しいチップをリストに追加する必要があるような、大きなswitchステートメントやそのような醜いものを手動で作成する必要はありませんか? 次のようなものです:
public const EEPROM & GetEEPROM(const std::string & id)
文字列「am29f032b」を渡すと、AM29F032B オブジェクトへの参照が返されます。または、文字列「sst39sf040」を渡すと、SST39SF040 オブジェクトへの参照が返されます。これにより、前述の関数を呼び出すことができます。指定されたチップで機能します。
このコードは AVR マイクロコントローラーで実行されるため、OOP のオーバーヘッドが大きいものは何もありませんが、私が使用している特定のマイクロコントローラーには、比較的大量のプログラム フラッシュとワーク RAM があるため、私のようなものではありません。 m は 2kb で操作しようとしていますが、リソースが限られていることに注意する必要があります。