今回作成したソースコードを公開して、その概略を説明する。
ディレクトリ構成は分析クラス図で示したドメイン構成にほぼ準拠しており、ファイル構成も各ドメインのクラス名に準拠している。(実装は分析どおりになっていないところが何箇所かある。)
公開版ではYellowSoftのプロジェクトファイルを削除してあります。
¥ ルートディレクトリ(プロジェクトの最上位ディレクトリ) ┣ bm03.h プロジェクトの共通インクルードファイル。 ┣ bm03Main.c main関数の置き場所。各種初期化とメインループ開始宣言。 ┣ その他 YellowIDEのプロジェクトファイルなど。 ┣ Kernel ┃ ├ Kernel.h μITRON風自作スケジューラのヘッダファイル ┃ └ Kernel.c μITRON風自作スケジューラの本体 ┣ System ┃ ├ SysCtrl.h システムコントローラのヘッダファイル ┃ └ SysCtrl.c システムコントローラの本体 ┣ FuncTest ┃ ├ FuncTest.h 基本機能テストのヘッダファイル ┃ └ FuncTest.h 基本機能テストの本体 ┣ CommandTest ┃ ├ CommandTest.h 走行コマンドテストのヘッダファイル ┃ └ CommandTest.c 走行コマンドテストの本体 ┣ SearchDrive ┃ ├ SearchDrive.h 探索走行のヘッダファイル ┃ ├ SearchDrive.c 探索走行の本体 ┃ ├ SearchAlg.h 探索アルゴリズムのヘッダファイル ┃ └ SearchAlg.c 探索アルゴリズムの本体 ┣ TrialDrive ┃ 今回は未実装なので空っぽ ┣ DriveCommon ┃ ├ Cart.h 台車のヘッダファイル ┃ ├ Cart.c 台車の本体 ┃ ├ Trimmer.h 姿勢制御部のヘッダファイル ┃ ├ Trimmer.c 姿勢制御部の本体 ┃ ├ WallDetector.h 壁検知部のヘッダファイル ┃ ├ WallDetector.c 壁検知部の本体 ┃ ├ Maze.h 迷路記憶部のヘッダファイル ┃ └ Maze.c 迷路記憶部の本体 ┣ DriveHardware ┃ ├ Sensor.h センサのヘッダファイル ┃ ├ Sensor.c センサの本体 ┃ ├ Motor.h モータのヘッダファイル ┃ └ Motor.c モータの本体 ┗ UserIF ├ Button.h ボタンスイッチのヘッダファイル ├ Button.c ボタンスイッチの本体 ├ LCD.h LCDのヘッダファイル └ LCD.c LCDの本体
オブジェクト指向分析・設計を取り入れたが、たまたま使用したYellowSoftのコンパイラがC++をサポートしていなかったため、C言語でオブジェクト指向設計を実装してみた。一応は、クラスの内部に情報を隠蔽できたつもりである。一部では、ROMの容量を確保するために、オブジェクト指向の視点からは望ましくない実装をしているところもある。
無駄なコードが沢山あるのか、はたまたデータ構造が悪いのか、ROMの容量がギリギリいっぱいになってしまった。もっとダイエットが必要だ。
探索アルゴリズムは SearchAlg.c を差し替えれば他のアルゴリズムを使用することも可能である。
台車クラスには走行コマンドを持たせることにした。走行コマンドが複雑多岐にわたる場合は、走行コマンドを独立させてクラスにするという手もある。
姿勢制御を Trimmer としたが、AttitudeControl の方がよかったかも?
I/O定義ファイルを作ってI/O定義を一括管理するか、各デバイスのヘッダファイルに分散させるかまよった末に後者を選択した。一括管理のほうが移植が簡単になってよかったかもしれない。
今回はμITRONもどきのスケジューラを自作して擬似マルチタスク処理を実現した。CPUがもうちょっと上等なものを使うのであれば、本物のITRONと置き換えてしまってもよい。
CPUの使用率は計測していないので不明。余裕はまだまだありそう。