08/02/25 21:59:05
制御系だって、オブジェクト指向は有効に使えますよ。
例えば、レジスタ構成が同じで、I/Oアドレスが異なる非同期シリアル
ポートが複数チャンネルあったする。
従来の泥臭いCのスタイルでは、
void CommInit_A();
void CommInit_B();
…
void CommPutChar_A(char c);
void CommPutChar_B(char c);
などと、実際には関数内部のコードはレジスタや変数領域の指定のみが
異なるだけの関数を、各ポート用に全ての処理毎に定義して呼び出す
のが、一般的スタイルだった。
オブジェクト指向で、非同期シリアルポートを扱うクラスを定義し、
リングバッファやバッファ管理用のグローバル変数をクラスのメンバ
変数として定義することで隠蔽化し、コード部分を共通化できる。
I/Oレジスタ群の先頭アドレスをメンバ変数として保持し、ポートの
指定は例えばコンストラクタの引数で行う。
もちろん、C言語でもポインタや構造体を使って似た様なコード記述は
実現できるが、C++の方がずっと簡単でスマートに記述できる。