沼津高専 電子制御工学科 | |||||||||
|
|||||||||
改訂記録 | |||||||||
---|---|---|---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | 提出先 | ||||
A01 | 1999.12.13 | 山下 | 八窪 | 初版 |
MIRSのソフトウェアは、標準として”自律小型知能ロボットMIRS用リアルタイムモニタ 「MIRX68K」”を用いて開発される。
MIRX86Kの構成は以下の図のようになっている。
ユーザが開発する部分はユーザタスク task00.c〜taskxx.c の部分であり、その他ハードウェアの仕様によりハードウェア関数部をその仕様に合わせ変更する。カーネル部を作る必要はない。図1.MIRXの構造
ハードウェアの制御に関して、ユーザタスクから直接ハードウェアを操作することはなく、ハードウェア関数を介してハードを制御するようになっている。
開発に使用する言語はC言語を用いる。
MIRSのソフトウェアはMIRX68K上での開発となる。MIRX68K上での開発ではプログラムをいくつかの処理単位に分割し、その分割した仕事の固まりをタスクと呼ぶ。それぞれのタスクで行われる処理には、プログラム中での事象により行われる処理(ノーマル処理)、一定の時間周期で行われる処理(タイマ処理)、非同期で発生する外部信号による割込み要求によって行われる処理(割込み処理)がある。ユーザは、一つのタスクにつき4種の処理を記述することになる。(処理の中身の有無にかかわらず4種の処理の記述が必要)(1)タスクの概念
例えば、MIRSの制御ソフトウェアならば、機能別にセンサ管理、フィードバック演算、DCモータ駆動部、行動判断部のように分割したり、動作モード別に分割してもよい。必要に応じて更に細かく分割することもできる。このようにして分割した仕事の固まりをタスクといい、それぞれのタスクで行われる処理には、プログラム中での事象により行われる処理(ノーマル処理)、一定の時間周期で行われる処理(タイマ処理)、非同期で発生する外部信号による割込み要求によって行われる処理(割込み処理)がある。
(2)タスクの分割
リアルタイムモニタはプログラムをタスク単位に分割して、それぞれのタスクを管理している。複数のタスクに分割する目安として以下のとおりである。
1.作業の内容や動作が違う処理
2.並列に実行する処理
3.時間の前後関係や因果関係で変化する処理
4.連続していても、処理速度に差がある処理
5.分割した方が修正、変更、保守が容易になる処理
(プログラミングすると大きなプログラムとなる処理など)
1 ソフトウエア開発環境と開発工程
MIRS開発で使用するソフトウエア開発設備の概略を 図1に示す。制御用68Kボードに実装されるソフトウエア開発のために、ソフトウェア開発用WS(ワークステーション) (富士通 S-4/CL4台)のOpenWindows(SunMicro Systems、Solaris2.3)上で動作する
(1)プログラム作成ツ−ル
(2)コ−ド生成ツ−ル
(3)デバッグ・ツ−ル
(4)解析ツ−ル
からなるソフトウエア開発ツール群がある。これらのツ−ル群をホストPCより使用し、開発を効率的に進めることができる。 開発工程の概略を図2に示す。ユーザが作成するソース・プログラムからソフトウエア開発用WS上で コンパイル・アセンブル・リンクによ り実行形式ファイル(アブソリュート・オブジェクト・ファイルともいう)を生成し、
(1)ホストPCを用いたデバッグ作業
(2)ICE(インサーキット・エミュレータ)を用いたデバッグ作業
(3)実行形式ファイルをROMライタに転送してROMに焼き付ける
(4)MPUボードのROMソケットに実装。
をする。
図2 ソフトウエア開発設備の概略図図3開発工程の概略図
・ディスク管理について
MIRSソフトウェアに関する全てのディスクをマスターディスクに保存する。ディスク損失に備え、ディスクはマスタ−ディスクと バックアップディスクの2ヶ所に保存することとする。
ファイル変更の際は、マスタ−ディスク中のファイルをコピ−したものを使って作業する。変更作業終了後、変更したディスク をマスタ−ディスクにコピ−する。・ファイル管理について
(1)プログラムはモジュ−ル毎に分割する。拡張子で、以下のように区別する。
モジュ−ル名.c (C言語のソ−ス)
・プログラム書式について
プログラムのはじめに次に示す内容を記す。プログラム名
プログラムの内容を簡単に横に記す
プログラムのバージョンナンバー
書式 Ver No △.□
バージョンナンバーの変更は以下のように行う
大きな訂正をした場合 △を変える
小さな訂正をした場合 □を変える
プログラムの作成日付
書式 〇〇〇〇.〇〇.〇〇
プログラムの変更日付
前回変更した日付の下に書き込む
その他特記事項
(1)コメントの付け方コメントが次行にまたがらない時、ソースからタブを2つ開けて記述する。
例: ct=0;[TAB][TAB]/*カウンタ初期値*/
・コメントが複数行にまたがる時,行頭の/*で始め、行頭の*/で終わる。
例: /*
=====================
= XXXXXX.C Ver.1.01 =
= written by XXXX =
=====================
*/
(2)関数名について
関数名はモジュール名を元に付ける。
15字以下とする。
(3)関数記述の規定
関数の型 関数名(引数の型 引数名、引数の型 引数名、\\\)
{
内部変数の宣言─────────┐
└───────────────┘
関数の内容───────────┐
└───────────────┘
}
*)関数の型は、int型のときは省略できることになっているが、後でデバッグする時のため等、考慮して、宣言するようにする。 (他の型のときに宣言しなければならないのは、当然である。)(4)TABについて
{と}で囲まれる部分は、TAB1つ分(スペースを使わずにTABキーを押して)字下げする。
変数の型と変数名の間に1つ又は2つ(どうしても必要なら3つ)例: int _ ____ i;
char ____ c;
(見やすいようにそろえる。)
・本文とコメントの間に入れる。(5)if文について
if文において実行される部分の前後には必ず{、}を入れる。
1. タスクの作成
a)項目2「タスクの作成」を参考してタスクを作成する。その際、タスクのファイル名はtask00.c
task01.c
・・・
task10.c
・・・
とし、番号を連続させること。すべてのタスクファイルはMIRX68Kのソースファイルmirx68kc.cが置かれているディレクトリ内に置かねばならない。b)ヘッダファイルmirx68k.hのインクルード MIRX68Kで定義したシステム・コール関数のプロトタイプ宣言をするためにタスク・ファイルの先頭部でmirx68k.hをインクルードすること。
c)ハードウエア関数の使用MIRSのハードウエアを操作する場合には、ハードウエア関数hard.c(Ver.2.2)で定義された関数を使用すること。そのために、これを使用するタスク・ファイルの先頭部でヘッダー・ファイルhard.h(Ver.2.2)をインクルードすること。
2. 「table.h」(タスク初期設定用ヘッダファイル)作成法
タスクの宣言や管理テーブルを組み込むためにこのヘッダファイルtable.hをMIRX68Kにインクルードする必要がある。MIRX68Kのソースファイルmirx68kc.cが置かれているディレクトリ内に置かねばならない。1)#define MAXTSK //タスク・ファイル数の宣言
定数 MAXTSK は「MIRX68K」とコンパイルするタスク・ファイル(task00.cからtaskxx.cまで)の数である。ここで定義した数だけタスクを作成しなければならない(しかし、ファイル内のイニシャライズタスクを除く3種のタスクの処理がなくとも ダミーとして定義する必要がある)。
3.実行形式ファイル「mirx.x」の作成法1)リンカ・コマンド・ファイル「mirx.cmd」の作成
使用するタスクファイル(オブジェクト・モジュール)をロードするために、コマンド・ファイルmirx.cmdを編集する。
2)MAKEFILE「makefile」の作成
実行形式ファイルを自動生成するためにmakefileを編集する。OBJS=にタスク・ファイルtaskxxのオブジェクト・ファイル名taskxx.oをスペースで区切って記述する。
3)実行形式ファイルの構築
MIRS用ソフトウエア開発ツールがインストールされたワークステーション上の自分のディレクトリに以下のファイルを作成した後、makeコマンドを実行すると実行形式ファイルmirx.x(名前はmakefile内のTARGET=に適当な名前を書くことにより変更できる)が自動生成されるので、MIRSのMPUボードのRAM上に展開するか、ROM化して実装することにより実行できる