Last Update 2019/04/03

リアルタイムOSと組み込み技術の基礎
実践μITRONプログラミング

高田 広章 監修/執筆
岸田 昌巳/宿口 雅弘/南角 茂樹 共著
B5判 200ページ
定価2,305円(税込)
JAN9784789833288
2003年7月1日発行
[絶版2013.12.20] リアルタイムOSと組み込み技術の基礎
大変恐縮ですが,こちらの商品は品切れ絶版となりました.

組み込みシステムとは,いろいろな機械や機器に組み込まれてその制御を行うコンピュータシステムのことであり,最近は適用分野が急速に広がっている.また,技術の進歩に合わせてソフトウェアの大規模化・複雑化が進んでおり,リアルタイムOSを用いることが不可欠となっている.ところが,リアルタイムOSを用いたシステム設計技法が体系化されていないため,リアルタイムOSを使いこなせるソフトウェア技術者が不足する,開発企業ごとに開発手法が異なる,技術用語の定義も企業ごとにばらばらであるなど,技術発展の阻害要因になりつつある.
そこで本書は,汎用オペレーティングシステムに関する一般的な知識と合わせて,μITRONを例としてリアルタイムOSの活用技法について解説した.

目次

 第1章 組み込みシステム概論
  1.1 組み込みシステムとは
  1.2 組み込みシステムの特性
   1.2.1 専用化されたシステム
   1.2.2 厳しいリソース制約
   1.2.3 高い信頼性
   1.2.4 リアルタイム性
  1.3 組み込みソフトウェア開発の特徴
   1.3.1 ハードウェアに密着したプログラミング
   1.3.2 開発環境とターゲットシステムの分離
   1.3.3 ハードウェアとの並行開発とコ・デザインの可能性
   1.3.4 多様なハードウェアと多様なOS
   1.3.5 システム内のソフトウェアは信頼できるという前提
  1.4 組み込みシステムの簡単な歴史と現状
  1.5 組み込みシステムの適用例
   1.5.1 自動車内の組み込みシステムの特徴
   1.5.2 エンジン制御システム
   1.5.3 自動車内のネットワークシステム
  1.6 組み込みソフトウェア開発の最近の動向
  1.7 ITRON仕様と他のRTOS

 第2章 リアルタイムOS概論
  2.1 リアルタイムOSとは
   2.1.1 OSの役割
   2.1.2 組み込み向けOSの目的
   2.1.3 マルチプログラミング環境
   2.1.4 リアルタイムOSの構造
  2.2 リアルタイムOSの機能
   2.2.1 マルチタスク機能
   2.2.2 タスクの状態
   2.2.3 タスクの切り替え
   2.2.4 割り込みハンドラとタスク
  2.3 タスク間同期
   2.3.1 タスク付属同期機構
   2.3.2 セマフォ
   2.3.3 優先度逆転(ミューテックス)
   2.3.4 割り込みハンドラとタスクの排他制御
   2.3.5 条件待機
   2.3.6 割り込み管理
   2.3.7 例外管理
   2.3.8 時間管理
   2.3.9 メモリ管理
  2.4 リアルタイムOSを使用するメリットとデメリット
   2.4.1 OSのメリット
   2.4.2 OSのデメリット
  コラム リアルタイムOS,リアルタイムカーネル,リアルタイムモニタ
  コラム アプリケーションプログラムの範囲
  コラム リアルタイムOSの必然性
  コラム リアルタイムという言葉
  コラム 基本部分の標準化の重要性
  コラム システムのスケジューリング可能性
  コラム 簡単なマルチプログラム環境?
  コラム 割り込みの出現と発展
  コラム 組み込みシステムにおけるデバイスドライバ
  コラム タスクの実行時間の見積もり
  コラム レディキューからTCBがなくなった場合
  コラム 究極のメモリリーク対策
  コラム 同期の様々なレベル

 第3章 組み込みシステムの開発環境
  3.1 開発環境
   3.1.1 クロス開発環境
   3.1.2 クロスコンパイラ
   3.1.3 クロスコンパイルの注意点
  3.2 デバッグ環境
   3.2.1 デバッグツール
   3.2.2 ハードウェアとソフトウェアのデバッグの分離
   3.2.3 シミュレータ
   3.2.4 CPUの時間開発
  3.3 リアルタイムOSの導入
   3.3.1 リアルタイムOSの導入判断
   3.3.2 導入の選択肢
  3.4 リアルタイムOSの移植
   3.4.1 CPUへの移植
   3.4.2 実機への移植
   3.4.3 組み込みシステムの初期化についてあれこれ
   3.4.4 動作モードの切り替え

 第4章 システムのモデル化と設計
  4.1 組み込みシステムの設計手法
   4.1.1 システムの大規模化と複雑化
   4.1.2 複雑化したシステムの設計手法
   4.1.3 過去の手法
   4.1.4 チーム開発
  4.2 モデルベースの開発
   4.2.1 アクティビティに基づくモデル化
   4.2.2 状態遷移に基づくモデル化
  4.3 オブジェクト指向設計
   4.3.1 主なオブジェクト指向設計の手法
   4.3.2 組み込みシステムにおけるオブジェクト指向
   4.3.3 オブジェクト指向をシステムに適用する
   4.3.4 UML
  4.4 タスクスケジューリング技術
   4.4.1 RMSスケジューリング
   4.4.2 固定優先度スケジューリングの問題点
   4.4.3 その対応策
  4.5 その他の設計手法やツール
   4.5.1 制御系CADツール
   4.5.2 コ・デザイン
   4.5.3 システムレベル設計言語

 第5章 ソフトウェア実装技法
  5.1 基本的プログラム構造
   5.1.1 リユーザブルプログラム
   5.1.2 リカーシブプログラム
   5.1.3 リエントラントプログラム
  5.2 マルチタスクプログラミング
   5.2.1 サブシステムへの分解
   5.2.2 実行時間に関する影響
   5.2.3 優先度を付ける
  5.3 タスクの管理
   5.3.1 生成方法
   5.3.2 静的生成から動的生成へ
   5.3.3 タスクの起動
   5.3.4 タスクの終了
   5.3.5 優先度ベーススケジューリング
  5.4 排他制御
   5.4.1 クリティカルセクション
   5.4.2 排他制御の方法
   5.4.3 排他制御の注意点
   5.4.4 ミューテックス
   5.4.5 セマフォ,ミューテックス以外の排他制御
  5.5 タスク間同期
   5.5.1 タスク付属同期
   5.5.2 イベントフラグ
   5.5.3 セマフォ
  5.6 タスク間通信
   5.6.1 メールボックス
   5.6.2 データキュー
   5.6.3 固定長メモリブロックとの連携
   5.6.4 メッセージバッファ
  5.7 割り込み処理の導入
   5.7.1 割り込みハンドラ
   5.7.2 組み込み処理からタスクへの通知
   5.7.3 サービスコールの遅延実行ができなくなった場合
   5.7.4 組み込みが使用できない場合
  5.8 周期ハンドラ
   5.8.1 タイマ割り込みによる一定周期の例示
   5.8.2 周期ハンドラでの例示
  5.9 アラームハンドラ
   5.9.1 アラームハンドラの例示
   5.9.2 タスク例外処理ルーチン
  5.10 タスク間速度差吸収
   5.10.1 待ち行列
   5.10.2 リングバッファ
   5.10.3 リスト構造
   5.10.4 メールボックス
   5.10.5 デバイスドライバとの排他制御
  5.11 メモリ管理
   5.11.1 モモリプール管理機能とは
   5.11.2 可変長と固定長
   5.11.3 メモリ確保の方法
  5.12 例外処理
   5.12.1 例外処理用のタスク
   5.12.2 タスク例外処理ルーチン
   5.12.3 CPU例外への対応
   5.12.4 カーネルのCPU例外ハンドラからタスク例外処理ルーチンを起動

 第6章 デバイスドライバの実装
  6.1 デバイスの抽象化とデバイスドライバ
   6.1.1 抽象化レベルの考え方
   6.1.2 抽象化の例外
   6.1.3 汎用性を高める抽象化
   6.1.4 デバイスドライバの役割
  6.2 デバイスドライバの構造
   6.2.1 アプリケーションとのインターフェース
   6.2.2 デバイスドライバのインターフェースモデル
   6.2.3 どこで機能を切り替えるのか
  6.3 デバイスドライバの実装形態
   6.3.1 共有サブルーチンとして実装
   6.3.2 タスクでの実装
   6.3.3 共有サブルーチンとタスクの組み合わせ
  6.4 同期機構の実装
   6.4.1 同期完了型
   6.4.2 非同期完了型
   6.4.3 非同期完了型の完了通知
   6.4.4 終了処理
   6.4.5 タイムアウト処理
   6.4.6 処理要求制御
  6.5 デバイスドライバの実装スケルトン
   6.5.1 共有ルーチンの排他制御
   6.5.2 共有ルーチンでの非同期完了型の実装
   6.5.3 タスクでの実装
   6.5.4 優先度付きメッセージの処理
   6.5.5 複数のスレッドによるデバイスドライバ
  6.6 デバイスごとの特性
   6.6.1 タイマデバイス
   6.6.2 通信デバイス(シリアルI/O)
   6.6.3 フラッシュメモリドライバ

 第7章 テストとデバッグ
  7.1 組み込みシステムのテストの難しさ
  7.2 単体テストからシステムテストへ
   7.2.1 関数単体テスト
   7.2.2 テスト設計の盲点
   7.2.3 割り込みハンドラの単体テスト
   7.2.4 テストの工夫
   7.2.5 テストの品質
   7.2.6 結合テスト
   7.2.7 組み合わせテスト
   7.2.8 システムテスト
  7.3 組み込みシステムのデバッグ
   7.3.1 デバッグ手法は問題解決手法
   7.3.2 何を信用すべきか
   7.3.3 デバッグテクニック

 第8章 ITRON以外のリアルタイムOS
  8.1 VxWorks
   8.1.1  VxWorksの特徴
   8.1.2 開発ツール
   8.1.3  VxWorksのドライバ
   8.1.4 他のOSとの違い
  8.2 OSEK/VDX仕様
  8.3 リアルタイムLinux
   8.3.1 Linuxでのリアルタイム処理
   8.3.2 RT-Linuxの問題点
   8.3.3 今後のリアルタイムLinux
  8.4 PDA用OS
   8.4.1 PalmOS
   8.4.2 EPOC
  8.5 Windows系OS
   8.5.1 Windows CE
   8.5.2 Windows NT Embedded
   8.5.3 INtimeとRTX

 付録A TOPPERSプロジェクトとTOPPERS/JSPカーネル
  A-1 JSPカーネルの主な特長
  A-2 TOPPERSプロジェクトの今後

 付録B 参考文献

 索引