Last Update 2020/11/24

割り込み動作からRTOSを使った設計,ツールによる動作検証まで
組み込みソフトウェアの設計&検証

藤倉 俊幸 著
B5判 288ページ
定価2,420円(税込)
JAN9784789833448
2006年9月1日発行
[絶版2015.3.11] 組み込みソフトウェアの設計&検証
大変恐縮ですが,こちらの商品は品切れ絶版となりました.

 組み込みソフトウェア開発者向けに,組み込み開発の初歩から高等技術までを広く学ぶことができます.
 章構成としては,組み込み初級技術者向けの第1部「組み込みプログラミングの基礎」と中級〜上級者向けの第2部「組み込みソフトウェアのモデリングと動作検証」に分かれています.第1部ではマイコンを例に,組み込み特有のリアルタイムやマルチタスクの概念を解説します.第2部では,よりマクロな視点で組み込み開発を行うためのモデリング,タスク設計,ソフトウェアがデッドロックなどを起こさないようにするための検証の方法について詳細に解説します.
目次

第1部 組み込みプログラミングの基礎

時間スケール,ハードウェアとソフトウェアの切り分け,協調モデル
第1章 組み込みソフトウェアの特徴
 1 時間スケールの多様さ
 2 ハードウェアとソフトウェアの切り分け
 3 想定外を想定する
 4 協調しながら同時に動かす
 5 制御モデルの作成を第一に考える

ハードウェアがわかればソフトウェアもわかる !プログラマも知っておくべき
第2章 ハードウェアの基礎
 1 ディジタル回路とゲート素子
 2 動作タイミングを決めるクロック回路
 3 ハードウェアでリセットを行う――リセット回路1
 4 初期化ルーチン――CPUの最初の仕事
 5 割り込み回路と割り込みシーケンス
 6 最優先の割り込みNMI処理ルーチン
 7 システム・チェックに使うウォッチドッグ・タイマ
 8 割り込みハンドラの仕事

OSなしで実現する
第3章 割り込みを使ったプログラミング
 1 割り込み負荷の見積もり
 2 割り込みにおけるデータ共有時の問題
 3 割り込みにもアーキテクチャ設計が必要
 4 単純な割り込みなしアーキテクチャPolled Loop
 5 外部割り込みを利用する制御Event Loop
 6 タイマ割り込みを利用する制御Timed Loop
 7 関数ポインタを利用する制御Function Queue
 8 ステート・マシンを使った制御State Driven

μITRON準拠OS NORTi4/H8/36014を使った
第4章 市販のOSソースで理解するディスパッチャ
 1 スタートアップ・ルーチンの中身
 2 タスク起動の手順
 3 タスク間コンテキスト・スイッチ
 4 割り込みによるコンテキスト・スイッチ
 5 ディスパッチャの技術を応用する

OSなしの世界とOSありの世界
第5章 RTOSにおけるタスクのしくみ
 1 タスクとは何か
 2 タスク優先度と階層構造
 3 RTOSでのタスクの状態
 4 RTOSを使うことによるCPU利用効率の向上
 5 リアルタイム性とRTOS
 6 タスク設計のしかた
 7 一般的なタスク設計の手順
 Column 動作モデルを要求分析の段階から作成して,タスク分割に利用する

複数のタスクが連携するための同期・通信機構――
第6章 タスク間インターフェース
 1 関数の共有にはリエントラント性が必要
 2 同期――複数タスクの連携
 3 通信――タスク間のデータの受け渡し
 4 割り込みハンドラとタスクとの同期通信

ハード・リアルタイムはやっぱりCyclic Executive
第7章 制約が厳しい条件でのスケジューリング
 1 組み込みではリソースが限られている
 2 RTOSを使わない動的アーキテクチャ
 3 Cyclic Executive型
 4 モード変更とオーバラン
 5 イベント駆動とフェイル・ソフト
 6 時間駆動の問題点
 7 信頼性をどう考えるか
 8 イベント駆動型の改良

タスク間のデータ共有の効率を追求する
第8章 ノンブロッキング・プロトコルとロック・フリー・プロトコル
 1 データ共有方法と性能の関係
 2 ノンブロッキング・プロトコル
 3 ロック・フリー・プロトコル

異なる周期で動作するタスク間の通信
第9章 時間の壁を越えるメッセージ
 1 タスク間に存在する時間の壁
 2 Cyclic Asynchronous Buffer
 3 CABの使い方と内部構造
 4 CABのメッセージ・セマンティクスあるいはイメージ

五月雨的なイベントに対応する
第10章 スポラディック・スケジューリングのはなし
 1 イベントの発生を雨にたとえる
 2 イベント・モデル
 3 制限型のスケジューリング
 4 スポラディック・サーバ

A Practitioner's Handbook for Real-Time Analysisを読む
第11章 メッセージ・ベース・スケジューリングと実装
 1 アーキテクチャ・レベル設計
 2 実装方法


第2部 組み込みソフトウェアのモデリングと動作検証

順序集合分割法【その1】
第12章 アクティブ・オブジェクト・モデリングの方法論
 1 アクティブ・オブジェクトの方法論
 2 動的構造の分析――服を着る順序の例
 3 動的構造の分析――踏切制御の例
 4 動的構造の設計
 5 実装とテスト
 Column 1 アクティブ・オブジェクトとは何か
 Column 2 プロセス代数の種類
 Column 3 ハッセ図
 Column 4 ステート・マシンの生成法
 Column 5 LTSAツール
 Column 6 アスペクト指向

順序集合分割法【その2】
第13章 アクティブ・オブジェクトによるタスクの分割と抽出
 1 ハッセ図の構造
 2 分割とアクティブ・オブジェクト
 3 反鎖による分割
 4 そのままモデリング
 Column 自動鎖分割=自動アクティブ・オブジェクト抽出

反復開発とアーキテクチャ
第14章 f(a+b)≦f(a)+f(b)の秘密
 1 要求の分解と実装の構築
 2 Schwarzの不等式とミクロ経済学の劣加法性
 3 インターフェース,構造,ふるまい
 4 アクティブ・オブジェクトによるふるまい記述
 Column 並列化オペレータ

ふるまいの合成と検証
第15章 既存のモデルを拡張する
 1 再考・踏み切りモデル
 2 制御仕様の検討

他人のモデルのバグ探しから始めよう
第16章 LTSAによる動作モデルの検証
 1 モデル検査機LTSA
 2 LTSAで電子レンジのモデルを検査する
 3 いつLTSAを使うか
 4 SPINを使ったモデル検査

LTSAモデルの作り方と要求レベルでの使い方
第17章 プロセス代数を使った動作モデルの検証
 1 形式的手法による検査
 2 LTSAモデルの作り方
 3 自動販売機のプロセス

要求レベルと設計レベルでLTSAを使う
第18章 評価ボードを使った動作モデルの事例
 1 LTSAを用いた演習の内容
 2 評価用ボードを使った演習の要求仕様
 3 要求レベルでのLTSAによる検証
 4 アーキテクチャ・レベルでのLTSA検証
 5 設計レベルでのLTSA検証

LTSAを用いた事例研究
第19章 自走式ロボットの動作モデルを検証する
 1 動作プラットホームの作成
 2 ふるまいレベルのモデル化
 3 動作レベルの階層構造

LTSAで「調教師とライオン」パズルを解く
第20章 動作モデル検証ツールを使いこなそう
1 「調教師とライオン」問題
2 問題の分析とモデル化
3 ガード条件の表記はwhen(...)
4 チョイス条件 ── 安全性をテストするための機構

デバイス系の設計の実例
第21章 状態の分析からモデル化,実装まで
 1 「動き」の階層構造
 2 簡単なデバイス系の動きの設計

タスク動作モデルの作成(1)
第22章 RTOSを使った場合の動作モデル
 1 RTOSを使った例――同期をとる複数のタスク
 2 RTOSの復習――RTOS下の動作パターン
 3 RTOSスケジューラとのリンク
 4 少し複雑な例――二つのタスクが同期をとりながら実行する場合
 5 LTSAモデルの一般性を確かめる

タスク動作モデルの作成(2)
第23章 タスクの動きをモデル化する
 1 タスク設計の簡単な例
 2 簡単な例の解釈(ADLとの対応)

タスク動作モデルの作成(3)
第24章 LTSAをタスクのテストに使う
 1 マルチタスク環境でのデバッグの難しさ
 2 タスク・モデルをテストに利用する
 3 動作モデルをテストに利用する
 4 ログ解析器生成スクリプトの例
 5 リバース・エンジニアリング

テスト・ケースをモデル・ベースで作成する
第25章 動作要求の開発
 1 LTSAのプラグイン
 2 hMSC――ハイレベル・メッセージ・シーケンス・チャート
 3 閉じていない動作仕様
 4 動作要求開発の例
 5 組み込みソフトウェアのテストに利用する

Prologを用いてステート・マシンを検証する
第26章 動作モデルからのテスト・ケース生成
 1 簡単なProlog講座
 2 LTSA モデルの変換
 3 検索プログラムの作成
 4 入力系列の生成
 5 さらなる拡張――最悪応答時間のときの実行パスも求められる!

LTSAのまとめと最新のLTSA
第27章 何に対して何を検査するのかが重要
 1 LTSAの特徴
 2 要求段階
 3 設計段階
 4 テスト段階
 5 LTSA v3.0について