割り込みと7セグメントLEDの制御T-Engineプログラミング入門(2)(4/4 ページ)

» 2006年07月04日 00時00分 公開
[中村 大真 パーソナルメディア株式会社,@IT MONOist]
前のページへ 1|2|3|4       

「プロセスベース」と「T-Kernelベース」

 前回と今回で解説した内容を、別の角度から整理してみましょう。

 T-Engine上のプログラムは、「プロセスベース」と「T-Kernelベース」の2つに大別されます。どちらも一長一短がありますが、どちらでプログラムするのがいいのでしょうか? 実は、ハムレットのように二者択一に悩む必要はありません。実現したいシステムをモジュール単位に分割し、処理の流れの大部分はメモリ保護が可能なプロセスベースで記述し、必要に応じて個々のハードウェア操作などをT-Kernelベースで書く、というのが正しい方法です。このようにモジュール化することにより、プログラムの開発効率や移植性、再利用性などが大きく向上します。


プロセスベースのプログラム
・ T-Kernel Extension上で動作
・ 一般のアプリケーションを作成するのに向いている
・ 1つのプロセスに対して1つの独立したローカルメモリ空間が割り当てられ、そのローカル空間上で動作する
・ メモリ保護があり、あるプロセスが暴走してもほかのプロセスやシステム全体がダウンすることはない
・ ハードウェア制御や割り込みを直接行うことはできないので、その部分はT-Kernelベースのプログラムを呼び出して行わせる形になる

T-Kernelベースのプログラム
・ T-Kernelの機能を直接使うプログラム
・ ハードウェア制御や割り込みなどを扱うことができるため、デバイスドライバなどのシステムプログラムを作成するのに向いている
・ システム共有のメモリ空間内に複数のT-Kernelベースのプログラムがロードされ、常駐する
・ メモリ保護はなく、ほかの領域(OS領域含む)を破壊する可能性がある。一方、「プロセスが用意したメモリをT-Kernelベースのプログラムに渡して、直接アクセスできる」というメリットもある

 例えば今回の計数器の場合、本来なら、

  • 数をカウントするプロセス
  • 押しボタンからの入力を検出するドライバ(T-Kernelベース)
  • 7セグメントLEDへの表示を行うドライバ(T-Kernelベース)

の3つに分けるのがセオリーです。

 しかし今回のプログラムは小規模なものですから、モジュール化せずに全体を1つのT-Kernelベースのプログラムとして構成することにしました。

 実は、連載第1回の“Hello, world”プログラムはプロセスベースで作成しました。第1回と第2回を注意して読み比べると、手順に若干異なる点があることに気付くでしょう。その違いとは、以下の2つです。

作業ディレクトリ
プロセスベースの場合は/usr/local/te/bapplディレクトリ下で作成します。一方、T-Kernelベースの場合は/usr/local/te/kapplディレクトリ下で作成します。

プログラムの実行方法
実行ファイルをrecvコマンドで転送した後、プロセスベースの場合は単にファイル名を指定して実行します。T-Kernelベースの場合は、「lodspg ファイル名」とします(lodspgは、ロード・システムプログラムの略)。


 今回は、「計数器」プログラムの作成を通して、T-Engineにおける割り込み処理を解説しました。

 今回の例では、割り込みハンドラ内で、カウントアップやLED表示という単純処理を行わせました。しかし、割り込みハンドラ内で複雑な処理を行わせることはリアルタイム性能の低下につながるため、望ましくありません。そこで登場するのが「タスク」という概念です。

 割り込みだけであればリアルタイムOSは不要かもしれませんが、タスクとなると、どうしてもリアルタイムOSが必要になります。そこで次回は、割り込みと並んで大きな鍵となる、タスクのプログラミングに進む予定です。(次回に続く)


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.