オリジナルOS「MicrOS」の設計と実装(1) ―― MicrOSの概要とソースの概観
● MicrOSbioslr.cとMicrOScmd.cのソース・コードを読む
ついでにMicrOSbioslr.cとMicrOScmd.cも見てみましょう.
MicrOSbioslr.cはほとんどがUARTのドライバを構成しています.この先頭にVBF制御という耳慣れない処理が入っています(リスト11).これはリング・バッファの制御を行う関数群です.UARTとデバッグ関数の中で使われています.この機能でデバッグ出力した結果をメモリにため込んでおき,後でUARTにつないで一括して出力するような機能を持ちます.
リスト11 MicrOSbioslr.cのVBF制御部
001: /*****************************************************+ 002: | MicrOS Drivers Load in RAM | 003: +*****************************************************/ 004: #define _MICROSBIOSLR_C_ 005: #include "MicrOS.h" 006: 007: /************* Variable Buffer Control ***************/ 008: /*====================================================+ 009: | VBF initialize | 010: +====================================================*/ 011: _VBFCTRL *_vbfinit(_VBFCTRL *vbf, char *buf, int sz) 012: { 013: vbf->org = buf; 014: vbf->lmt = buf + sz; 015: vbf->getp = buf; 016: vbf->setp = buf; 017: return(vbf); 018: }
MicrOScmdはUARTを使ったコンソールを持っており,デバッグ用コマンドを実行できます.現在はメモリ・ダンプ・コマンドとメモリ変更コマンドが組み込まれていますが,コマンド・ラインの解析処理を行ってくれるので,アプリケーションでコマンドを定義して追加するのは容易です.
MicrOSbioslr.cは444行,MicrOScmd.cは826行です.
● MicrOSasm.sのソース・コードを読む
V850-MicrOSを構成するソース・プログラムはヘッダ・ファイルを除くと,あとはアセンブリ・コードで記述されたMicrOSasm.sだけです.これは1000行程度で,意外に大きいと思われるかもしれません.しかし,このうちの4分の3はデバッグ関数や__sprint関数,コマンド処理で使われる編集系の関数です.CA850アセンブラに慣れるためとデバッグ出力に時間をかけたくなかったので,アセンブリ・コードで記述しました.
MicrOSasm.sには,C言語では記述不可能な割り込み禁止・解除の関数などとマルチプログラミングの根幹であるディスパッチャが含まれています.__task関数もこの中にあります.これらの用語については後で説明します.
MicrOSのソース・プログラムが,組み込みOSの機能以外のところでステップ数を稼いでいる印象を受けたかもしれませんが,これがMicrOSの実体です.
MicrOSのソース・コード全体の構成を図1に示します.