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

田口 信夫

tag: 組み込み

技術解説 2008年5月27日

5.割り込み関連の関数

● 割り込み禁止

 int __DIC(void)

 割り込み禁止のモードに設定します.旧PSW値を返り値とします.

● 割り込み解除

 void __EIC(int psw)

 パラメータで指定されたpswの値を判断して割り込み禁止状態を継続するかどうかを処理します.pswが割り込み解除の状態ならば割り込みを解除します.

● トラップ割り込み発生

 void __trap00(void)
 void __trap00a(void)

 トラップ割り込みを発生させる関数です.__trap00はトラップ命令とリターン命令で構成されます.__trap00aは現在のPSWモードをチェックして,割り込みモード(NPまたはEP)のとき,または現在実行中のタスクがないときは,トラップ命令を発行せずにノップ動作になります.トラップ命令が実行されると実行中のタスクにレジスタ・セーブ動作が行われます.そして,TCBがチェックされ,ウェイト・フラグがチェックされて,ウェイト状態でなければレディ・タスク・プールに戻されます.ウェイト状態であれば,この関数をコールする以前にレジスタ・セーブ以外の必要なウェイト処理(TCBをウェイト・シーズSCBにリンクする処理とウェイト・フラグをセットする処理など)が行われていなければなりません.

 これはコンパイラで割り込み処理を構成するときに必要な関数です.MicrOSでは内部割り込みを使うときはワーキング・レジスタのセーブは行いませんが,この関数によってコンパイラの要求する諸条件を吸収できます.

● CPUモードの判定

 int __cpumode(void)

 実行中の状態が割り込みモードなのかユーザ・モードなのかをチェックします.ユーザ・モードであれば0が返ります.この関数はアセンブリ・コード版にはありません.

● 割り込みモードに設定する

 int __setPSWint(void)

 MicroOSはCA850の_interrupt関数がEPモードで動作することを前提に設計しましたが,このモードになっていません.そこで,この関数によって一時的にEPモードに変更します.返り値は変更前のPSWです.この関数もアセンブリ・コード版にはありません.

● ユーザ・モードに戻す

 int __restorePSW(int psw)

 __setPSWintで変更したPSWを元に戻します.アセンブリ・コード版にはありません.

組み込みキャッチアップ

お知らせ 一覧を見る

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