最近公開されたTOPPERS/ASP3については、Mac OS Xでのシミュレーション環境がいち早く公開されている。今回はそのビルド・実行方法と、簡易的なタスクの実装方法についてまとめる。
シミュレータの実行
ダウンロード
以下から「Mac OS Xシミュレーション環境簡易パッケージ」をダウンロード、解凍
TOPPERSプロジェクト/ASP3カーネル
環境構築
ダウンロードフォルダ中の「doc/user.txt」に必要な環境が記述されている。
基本的に以前のTOPPERS/ASPと同じ環境を使う。これについては公式・非公式ともにわかりやすい解説が複数あるので、今回は割愛する。
ただ一点だけ、TOPPERS/ASPからの変更点として、コンフィギュレータがrubyスクリプトになっているので、rubyの実行環境が必要になる。
ビルド、実行
ダウンロードフォルダで以下を実行する。
mkdir OBJ cd OBJ ruby ../configure.rb -T macosx_xcode make
するとOBJフォルダ内に「asp」という実行ファイルが生成される。これを実行するとサンプル・アプリケーションを実行するシミュレーション環境が動く。
タスクの実装
今回はデフォルトの環境に簡単なタスクを追加する。
具体的には「task_hoge」「task_highlevel_hoge」という2つのタスクを用意。task_hogeからより優先度の高いtask_highlevel_hogeをウェイクアップする処理を追加する。
タスク本体の実装
まずタスクの実装を用意。sampleフォルダのsample1.cに以下を記述
void task_hoge(intptr_t exinf) { while (true) { slp_tsk(); syslog(LOG_INFO, "hoge"); wup_tsk(TASK_HIGH_HOGE); syslog(LOG_INFO, "hoge end"); } } void task_highlevel_hoge(intptr_t exinf) { while (true) { slp_tsk(); syslog(LOG_INFO, "high hoge"); syslog(LOG_INFO, "high hoge end"); } }
sample1.hに以下のプロトタイプ宣言を追加。
extern void task_hoge(intptr_t exinf); extern void task_highlevel_hoge(intptr_t exinf);
コンフィギュレータによるタスク設定コード生成
sampleフォルダのsample1.cfgに以下の記述を追加
CRE_TSK(TASK_HOGE, { TA_NULL, 10, task_hoge, HIGH_PRIORITY, STACK_SIZE, NULL }); CRE_TSK(TASK_HIGH_HOGE, { TA_NULL, 11, task_highlevel_hoge, HIGH_PRIORITY - 1, STACK_SIZE, NULL });
冒頭で作成したOBJフォルダにて、ターミナルで以下を実行してタスク設定コードを更新する。
ruby ../configure.rb -T macosx_xcode
タスク呼び出し部分の実装
sample1.cのmain_task関数内のタスク起動部の記述に、以下のタスクを起動する記述を追加。
act_tsk(TASK_HOGE); act_tsk(TASK_HIGH_HOGE); wup_tsk(TASK_HOGE);
なお既存コードに今回の追加を行うとtask関数内で不正なメモリアクセスが発生するけれど、追加部分の実行に支障はないのでそのままとする(graph配列への参照部分にガード条件を追加すれば抑止できる)。