宇野 俊夫 監修
Robin Williams 著
有限会社ハラパン・メディアテック 監修
有限会社ハラパン・メディアテック 翻訳
有限会社ハラパン・メディアテック 原著
宇野 みれ 翻訳
宇野 みれ 原著
より多くの身の回りのテクノロジが組込みプロセッサに依存するようになるにつれ、リアルタイムソフトウェアに対する需要が急速に高まっています。(中略)
本書は、リアルタイムシステムの設計時に遭遇する固有の問題を掘り起し、ソフトウェア実現のための代替手法を説明します。最初のリアルタイムシステム開発プロジェクトに直面する前に、リアルタイムシステムに関する科学とテクニックを勉強する機会を得たプログラマが数少ないのは嘆かわしいことです。新製品の家電やレジャー用品の多くの基本動作がマイクロプロセッサに依存しているため、こうした現状を改善できれば、皆にとって、より安全で、ストレスが少ない世界になることでしょう。
(著者まえがきより)
第1章 リアルタイムシステム入門
1.1 概要
1.2 リアルタイムシステム開発
1.3 システムの複雑さ
1.4 マイクロプロセッサとリアルタイムアプリケーション
1.5 リアルタイムシステムの定義
1.6 プログラミング構造
1.7 応答レイテンシ
1.8 相対速度
1.9 ソフトウェアのタイミング
1.10 高速タイミング
1.11 出力タイミングの負荷
1.12 リアルタイムシステムのデバッグ
1.13 ハードウェアへのアクセス
1.14 マシンI/O
1.15 プログラムI/O
1.16 ハードウェア/ソフトウェアのコストトレードオフ
1.17 ハード、ソフト、ファーム
1.18 ソフトウェアクオリティアシュアランス(SQA)
1.19 経験と歴史
1.20 将来?
1.21 まとめ
1.22 ディスカッションのための問題と課題
1.23 参考文献
第2章 シンプルなリアルタイムシステムの実装
2.1 概要
2.2 マルチタスキング
2.3 タスクループ
2.4 コードのタイミング問題
2.5 割込みドリブンのタスク
2.6 タスクスワッピング:どのように?いつ?どれを?
2.7 タスクのリエントリ
2.8 タスクスワップの原因
2.9 リソースの共有
2.10 デジタルI/Oにプリンタポートを使う
2.11 モータ
2.12 ステッピングモータの操作上の詳細
2.13 あるプロフェッショナルプログラマのライフサイクル
2.14 まとめ
2.15 ディスカッションのための問題と課題
2.16 参考文献
第3章 基本入出力
3.1 はじめに
3.2 メモリマップドポート
3.3 I/Oマップドポート
3.4 ポートレジスタ:プログラマの観点から
3.5 ポートポーリング
3.6 I/Oアクセスの許可
3.7 ブロックすべきか、すべきでないか
3.8 例外と割込み処理:オンデマンドのサービス
3.9 複数の割込みソース
3.10 電源障害の検出
3.11 パソコンの割込み構造
3.12 遅延割込み処理
3.13 例外と割込みの使い方
3.14 割込みの予測不能性
3.15 クリティカルなデータの保護:割込みといかに通信するか
3.16 バッファドI/O:割込みデバイスドライバ
3.17 まとめ
3.18 ディスカッションのための問題と課題
3.19 参考文献
第4章 周期実行処理とハードウェア
4.1 はじめに
4.2 周期実行処理の基本メカニズム
4.3 システムチック
4.4 拡張されたタスク
4.5 サイクリックエクゼクティブの実装
4.6 サイクリックエクゼクティブの実行パターン
4.7 サイクリックエクゼクティブコードのデモンストレーション
4.8 キーパッドアプリケーション
4.9 まとめ
4.10 ディスカッションのための問題と課題
4.11 参考文献
第5章 有限状態マシン~設計ツール
5.1 はじめに
5.2 システムの境界定義
5.3 チャネルの帯域幅
5.4 FSD(Finite State Diagrams)
5.5 補助変数
5.6 自動車の検出
5.7 簡素化のテクニック
5.8 入力データとトリガイベント
5.9 ティアーズモード
5.10 階層的な状態チャート
5.11 並行FSM
5.12 オブジェクト指向デザインパターンと状態マシン
5.13 まとめ
5.14 ディスカッションのための問題と課題
5.15 参考文献
第6章 有限状態マシン~実装オプション
6.1 はじめに
6.2 FSDの実装
6.3 直接的なシーケンシャルコーディングによる実装
6.4 SWITCH-CASE実装モデル
6.5 GOTO/ラベル実装モデル
6.6 FST実装モデル
6.7 実装へのオブジェクト指向のアプローチ
6.8 FSMのスケジューリング問題
6.9 その他のFST
6.10 実行時の環境
6.11 まとめ
6.12 ディスカッションのための問題と課題
6.13 参考文献
第7章 なぜマルチタスクなのか
7.1 はじめに
7.2 リアルタイムアプリケーションとは
7.3 マルチタスクとマルチスレッド
7.4 実行時のサポート環境
7.5 実行時スケジューリング
7.6 マルチタスク処理の正当性
7.7 応答性
7.8 設計の知的シンプルさ
7.9 実装の厳密さ
7.10 ユニットテスト
7.11 システムの統合性
7.12 システム統合性テスト
7.13 マルチプロセッサハードウェアの活用
7.14 タスクスワッピングのためのプロセッササポート
7.15 Linuxで新規タスクを開始する
7.16 まとめ
7.17 ディスカッションのための問題と課題
7.18 参考文献
第8章 タスク間通信と同期化
8.1 はじめに
8.2 データ共有
8.3 イベントフラグ
8.4 セマフォ
8.5 ファイルのロック
8.6 シグナルのインターセプト
8.7 共有データバッファ
8.8 パイプ
8.9 待ち行列の制御
8.10 ソケット
8.11 RPC(リモートプロシージャコール)
8.12 ADAランデブー
8.13 Javaの同期化
8.14 まとめ
8.15 ディスカッションのための問題と課題
8.16 参考文献
第9章 RTE(リアルタイムエクゼクティブ)
9.1 はじめに
9.2 リアルタイムシステムの実装
9.3 RTE vs OS
9.4 RTEへのアプリケーションの移植
9.5 RTEのためのハードウェアサポート
9.6 RTE機能
9.7 Linux
9.8 POSIXの機能
9.9 スケジューリング
9.10 Unix FHS(Filesystem Hierarchy Standard)
9.11 Linuxカーネルの構成と構築
9.12 組込みアプリケーション用Linux
9.13 組込みLinuxのブート
9.14 言語サポート
9.15 ライセンス問題
9.16 まとめ
9.17 ディスカッションのための問題と課題
9.18 参考文献
第10章 入出力インタフェースの使い方
10.1 はじめに
10.2 入力操作と出力操作
10.3 カテゴリ
10.4 OSのサポート
10.5 ロウI/O
10.6 LinuxにおけるI/O
10.7 ダイレクトデバイスドライバ
10.8 割込み下のデバイスドライバ
10.9 待ち行列の理論
10.10 まとめ
10.11 ディスカッションのための問題と課題
10.12 参考文献
第11章 リアルタイムシステムの構造化設計
11.1 はじめに
11.2 設計メソッド
11.3 増分機能分割
11.4 ダイアグラムを使った設計
11.5 データフローダイアグラム(DFD)
11.6 DFDの実装
11.7 構造化チャートの読み方
11.8 リアルタイムシステムのためのYourdon構造化分析および設計
11.9 イベントベースのDFDの実装
11.10 ストアドデータモデリング:EARモデリング
11.11 ERDからDFDへの変換
11.12 格納されたデータの正規化
11.13 まとめ
11.14 ディスカッションのための問題と課題
11.15 参考文献
第12章 マルチタスクの設計手法
12.1 はじめに
12.2 マルチタスク用のSA/SD
12.3 タスクへの分割
12.4 結合とカップリング
12.5 タスク間通信のための設計
12.6 デバイスのインタフェース
12.7 タスクダイアグラム
12.8 CODARTSメソッド
12.9 リエントラントなコード
12.10 タスク優先度の設定
12.11 実行のタイミング
12.12 ランタイムサポート
12.13 まとめ
12.14 ディスカッションのための問題と課題
12.15 参考文献
第13章 リアルタイムシステムのためのUML
13.1 はじめに
13.2 統一モデリング言語:UML
13.3 ユースケース図
13.4 オブジェクトとクラス
13.5 オブジェクトコーラボレーション図
13.6 クラス図
13.7 オブジェクト間のメッセージング
13.8 相互作用図
13.9 アクティビティ図
13.10 まとめ
13.11 ディスカッションのための問題と課題
13.12 参考文献
第14章 リアルタイムシステムのオブジェクト指向アプローチ
14.1 はじめに
14.2 リアルタイムオブジェクト指向の設計と開発
14.3 リアルタイムのための設計
14.4 オブジェクト、オブジェクト
14.5 オブジェクトの発見
14.6 クラスのステレオタイプ分析
14.7 タスク処理
14.8 Javaによるマルチスレッディング
14.9 デザインパターン
14.10 まとめ
14.11 ディスカッションのための問題と課題
14.12 参考文献
第15章 システムインテグリティ
15.1 はじめに
15.2 ソフトウェアクライシス
15.3 フォルトトレランス
15.4 システム要件
15.5 要件分析のテクニック
15.6 実証と検証
15.7 よい設計
15.8 シミュレーション研究
15.9 ペトリネット
15.10 セキュリティのための設計―ソースコードチェック:lint
15.11 コードの再利用
15.12 コンパイル時チェック
15.13 コードのテスト
15.14 システムインテグレーションテスト
15.15 実行時エラーのトラッピング
15.16 実行時チェック:assert
15.17 実行時チェック:例外とハードウェアウォッチドッグ
15.18 実行時チェック:スタック長チェック
15.19 ビジュアルな補助
15.20 ずぶ濡れの月曜日のシナリオ
15.21 CVS
15.22 CVSリポジトリの設定
15.23 設計とコードレビューの実施
15.24 エクストリームプログラミング
15.25 ソフトウェア標準
15.26 MISRA
15.27 最後のアドバイス
15.28 まとめ
15.29 ディスカッションのための問題と課題
15.30 参考文献
第16章 リアルタイムシステム開発のための言語:C、Ada、Java
16.1 はじめに
16.2 選択
16.3 プログラミング言語の一般的な要件
16.4 リアルタイムコンパイラのための特別な要件
16.5 コンパイラの最適化
16.6 リアルタイム用C言語
16.7 Ada
16.8 Java
16.9 クロスコンパイラ
16.10 まとめ
16.11 ディスカッションのための問題と課題
16.12 参考文献
第17章 クロス開発手法
17.1 はじめに
17.2 ホストターゲット開発
17.3 クロスコンパイラとリンカ
17.4 gccのコンパイル過程
17.5 スタートアップコード
17.6 GNUリンカ:ldとリンカスクリプトファイル
17.7 エントリポイント
17.8 gccクロスコンパイラの構築
17.9 ヒント
17.10 ELF(Executable and Linking Format)
17.11 ELFにおけるC++のグローバルコンストラクタとデストラクタ
17.12 デバッグテクニック
17.13 プログラムのメモリオプション
17.14 Flashメモリ
17.15 ターゲットコードの実装
17.16 まとめ
17.17 ディスカッションのための問題と課題
17.18 参考文献
第18章 組込みマイコンシステム
18.1 はじめに
18.2 マイクロプロセッサとマイクロコントローラ(マイコン)
18.3 Intel 8051 8ビットファミリー
18.4 自販機テクノロジ
18.5 ARM32ビットファミリー
18.6 StrongARMプロセッサ
18.7 Puppeteer StrongARMマイコンボード
18.8 アプリケーション
18.9 FPGAの利用法
18.10 シリアルアクセスメモリ
18.11 まとめ
18.12 ディスカッションのための問題と課題
18.13 参考文献
第19章 Linuxデバイスドライバ
19.1 はじめに
19.2 組込みLinux
19.3 Linuxの移植
19.4 デバイスドライバの役割
19.5 メジャー番号とマイナー番号
19.6 インデックスブロック:Unixのinode
19.7 Linuxデバイスドライバの種類
19.8 新たなdevfs
19.9 まとめ
19.10 ディスカッションのための問題と課題
19.11 参考文献
第20章 ハードウェア/ソフトウェアの協調設計
20.1 はじめに
20.2 システム・オン・チップ
20.3 知的財産
20.4 リコンフィギャラブルハードウェア
20.5 ソフトウェアサポート
20.6 Altera APEX/Excaliburデバイス
20.7 プロセッサコア
20.8 まとめ
20.9 ディスかションのための問題と課題
20.10 参考文献
付録 オシロスコープを使ったデバッグ
A1.1 はじめに
A1.2 オシロスコープの使い方
A1.3 アナログCRTスコープのチューニング
A1.4 オシロスコープ入門
A1.5 デジタルストレージスコープ
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。