BROKEN's Advanced Vehicle Laboratory

プロジェクト / Basic Mouse 2003

5.ソースコード概説

今回作成したソースコードを公開して、その概略を説明する。

ディレクトリ構成は分析クラス図で示したドメイン構成にほぼ準拠しており、ファイル構成も各ドメインのクラス名に準拠している。(実装は分析どおりになっていないところが何箇所かある。)

ルートディレクトリ(プロジェクトの最上位ディレクトリ)
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のプロジェクトファイルを削除してあります。

オブジェクト指向分析・設計を取り入れたが、たまたま使用したYellowSoftのコンパイラがC++をサポートしていなかったため、C言語でオブジェクト指向設計を実装してみた。一応は、クラスの内部に情報を隠蔽できたつもりである。一部では、ROMの容量を確保するために、オブジェクト指向の視点からは望ましくない実装をしているところもある。

無駄なコードが沢山あるのか、はたまたデータ構造が悪いのか、ROMの容量がギリギリいっぱいになってしまった。もっとダイエットが必要だ。

探索アルゴリズムは SearchAlg.c を差し替えれば他のアルゴリズムを使用することも可能である。

台車クラスには走行コマンドを持たせることにした。走行コマンドが複雑多岐にわたる場合は、走行コマンドを独立させてクラスにするという手もある。

姿勢制御を Trimmer としたが、AttitudeControl の方がよかったかも?

I/O定義ファイルを作ってI/O定義を一括管理するか、各デバイスのヘッダファイルに分散させるかまよった末に後者を選択した。一括管理のほうが移植が簡単になってよかったかもしれない。

今回はμITRONもどきのスケジューラを自作して擬似マルチタスク処理を実現した。CPUがもうちょっと上等なものを使うのであれば、本物のITRONと置き換えてしまってもよい。

CPUの使用率は計測していないので不明。余裕はまだまだありそう。