オリジナルOS「MicrOS」の設計と実装(1) ―― MicrOSの概要とソースの概観

田口 信夫

tag: 組み込み

技術解説 2008年2月 8日

● 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に示します.

zu01_01.gif

図1 MicrOSのソース・コードの全体構成

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! 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日