オリジナルOS「MicrOS」の設計と実装(3) ―― MicrOSのシステム・コール

田口 信夫

tag: 組み込み

技術解説 2008年5月27日

2.アプリケーションで作成する関数

 以下ではアプリケーションで作成するaplMain関数について説明します.

 void aplMain(void)

 CA850はリセット起動でスタートアップ・ルーチンを呼び出すようなプログラムを生成します.スタートアップ・ルーチンは開発システムが値を決めるtp,gp,epとctbpというようなすべての関数で共通に使用するレジスタの設定とRAM領域の初期化を行った後,_main関数をコールします._main関数はアプリケーション・システムのスタートのための関数ですが,ここにはMicrOSの初期設定処理が記述されています.

 MicrOSの初期設定処理には次の処理が含まれています.

  • ハードウェア初期設定
  • 動作クロックの設定
  • メモリ・ウェイト数の設定
  • システム・コントロール・ブロックの初期設定
  • アプリケーション・システムの初期設定 (aplMain関数のコール)
  • メモリ・アロケーション領域の初期設定
  • マルチプログラミング制御のためのディスパッチャへのジャンプ

 最初の3項目については,V850ハードウェア説明書の3.4.8項を参照してください.

 システム・コントロール・ブロックの初期設定は領域のクリアとaplMainをコールするための準備処理です.aplMainの処理が終了するとシステム・コントロール・ブロックの中のTCB領域が確定するので残りの領域をメモリ・アロケーション領域に割り当てます.

 aplMain関数はアプリケーション・システムの初期設定を行う関数で,主な処理はタスク登録です.アプリケーション・システムを構成するタスクはすべてaplMainの中で登録しなければなりません.

 aplMainには次の処理を組み込みます.

  • ハードウェアの初期状態
  • UARTの初期設定
  • デバッグ関数の初期設定
  • タスクの登録
  • システム共通変数の初期設定

 アプリケーションによって初期状態が確定されなければならないハードウェアは,ここで初期設定します.

 UARTの初期設定をタスク登録の前に行うのはコマンド・タスクやコマンド・コールバック関数を登録する可能性があるからです.これらの機能を使わなければ,取り外すこともできます.デバッグ関数の初期設定をここで行うのは特に意味がありません.デバッグ関数を使う前であればどこでも行えます.

 MicrOSに登録するタスクの数は,システム・コントロール・ブロックのサイズによります.これ以外の制限は特にありませんが,aplMainはデフォルトで__aplTCBListに登録したIDを保存するようにコーディングされています.従って,__aplTCBListの容量で制限されることになります.

 MicrOSには,インターバル・タイマの割り込み処理を割り込みの中で処理する方法と,タスクを起動して処理する方法が実装されています.タイマ・コールバック関数の処理をタスクで行うようになっているとき,MicrOSはタイマ・タスクをアクティブにしなければなりません.このときにタイマ・タスクのIDを知っていなければなりません.MicrOSはこれをtmrTCBの名称で参照します.この値は,MicrOS.cの先頭でタイマ・タスクのIDを示すようにしておかなければなりません(デフォルトは__aplTCBList[0]).MicrOSのコマンド処理については,UARTの割り込み処理の中で処理するか,タスクの中で処理するかを選択できるようになっています.MicrOScmdがタスクで使われたときにタスクのIDを必要としますが,こちらは_uartsetcb関数でUARTドライバに登録することになるので,タイマ・タスクのような考慮は不要です.

 最後にアプリケーション・システムの共通変数の初期設定を行います.このときにメモリ・アロケーションのシステム・コールは発行できないことに注意してください.メモリ・アロケーションのシステム・コールは,aplMainが処理を終えない限り使うことができません.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日