「図解 μITRONによる組込み システム入門」 サンプルページ ·...

36

Transcript of 「図解 μITRONによる組込み システム入門」 サンプルページ ·...

Page 1: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos
Page 2: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

「図解 μITRON による組込み

システム入門」

サンプルページ

この本の定価・判型などは,以下の URL からご覧いただけます.

http://www.morikita.co.jp/books/mid/078451

※このサンプルページの内容は,初版 1 刷発行当時のものです.

Page 3: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos
Page 4: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

i

私たちの身の周りには,家電製品,交通機関,産業を支える各種の機器など,世の中にはマイコンで制御された製品やシステムがあふれています.このように,内蔵したマイコンで制御されたシステムを「組込みシステム」と呼んでいます.「組込みシステム」は,センサ,モータや電子回路,マイコンから構成されるハードウェアと,マイコンを制御するためのソフトウェアで構成されています.最近,組込みシステム用のリアルタイム OSが注目されてきており,複雑になるシステムを効率よく開発するための切り札として期待されています.本書は,この組込みシステム用のリアルタイム OSとはどのようなものか,なぜ広

く使われるようになってきたかを理解し,そして実際にリアルタイム OSを使ってみることを目的にして書かれています.µ ITRONは日本の代表的なリアルタイム OSです.本書ではµ ITRONの仕組みと機能を解説するとともに,実機でリアルタイム OSを使ってみることで,よりよい理解が得られることを目標にしました.

しかしリアルタイム OSは,高機能であるがゆえに大容量の ROM/RAM,また高性能,高機能のマイコンが必要になります.そのため,リアルタイム OSの勉強をしようと思っても,開発環境,デバッグ環境が高価になり,企業の設計・開発現場以外では,実機で演習するのが困難な状況です.そこで本書では,学校や個人でも演習機材をそろえて実機演習ができるように,安

価なマイコンで動作する簡易型のリアルタイム OSを取り上げました.µ ITRONの主要な機能をもちながら普及型のマイコンで動作するように作られた,ルネサス北日本セミコンダクタ製の Smalight OSです.

筆者の一人武井は,ルネサスエレクトロニクスのµ ITRON仕様 OSである HI7000シリーズの開発にたずさわった経験があり,本書で演習用に取り上げた Smalight OSの開発にも深く関わっています.現在はリアルタイム OS関係のサポート業務と同時に,トロン協会で教育グループの委員として活動しています.もう一人の筆者中島は,日立グループ内で長年マイコン教育とリアルタイム OSの

技術講座を担当し,リアルタイム OSの実機演習を行ってきました.本書は二人の筆者の経験を生かして,第 1章から第 3章の基礎編では,武井がリアルタイム OSとµ ITRONについて解説し,第 4章から第 8章の実践編では中島が実機上で Smalight OSを動かしながら,細部の動作説明をしています.基礎編の第 1章ではリアルタイム OSとはどのようなものか,どのような OSがあ

るかを説明します.

まえがきまえがき

巻頭.indd 1 2011/02/14 10:16:21

Page 5: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

ii

まえがき

第 2章では,日本で最も多く使われているµ ITRONの動作と,各種機能について説明します.第 3章では,ROM,RAMの容量が小さい安価なマイコン上でも動作するµ ITRON

ライクな簡易型 OS,Smalight OSの紹介をします.Smalight OSは,第 4章以降の実践編の演習で使用します.実践編の第 4章では,組込みシステムの設計の流れと,演習をするときに作成する図表の説明をします.第 5章では,リアルタイム OSを用いるシステムを構築する作業コンフィギュレーションについて説明します.また,演習で用いる開発環境の説明をします.第 6章では,例題を用いてリアルタイム OSの中心機能であるマルチタスクの動作

と代表的なオブジェクトを説明します.第 7章では,例題より少し規模が大きい演習問題で設計の流れを体験し,実際にシステムを作ってみます.第 8章では,リアルタイム OSの応用例として,簡単な自走ロボットの制御につい

て紹介します.開発環境の使い方と,各種ツールの入手方法は付録にまとめてあります.

以上の流れをたどっていただくことで,組込みシステムの中心になるリアルタイムOSがどのようなものであるかを理解していただけると思います.

2007年 12月著者

巻頭.indd 2 2007/12/21 10:11:20

Page 6: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

iii

第1章 組込み向けリアルタイムOS概論 …………………………………… 2 1.1 組込みシステムとは …………………………………………………………… 2 1.2 組込みシステムのソフトウェアとハードウェア …………………………… 3 1.3 組込みシステムの特性 ………………………………………………………… 4 1.3.1 専用化システム ▶ 5 1.3.2 マルチタスク ▶ 5 1.3.3 リアルタイム性 ▶ 6 1.3.4 厳しい制約下での製品リリース ▶ 7 1.3.5 信頼性の要求 ▶ 8 1.4 組込み向けリアルタイム OSとは …………………………………………… 8 1.4.1 リアルタイム OSの役割 ▶ 8 1.4.2 プログラム構造の比較 ▶ 10 1.4.3 リアルタイム OSの導入メリット ▶ 13 1.4.4 パソコン用 OSと組込み向けリアルタイム OSの違い ▶ 16 1.4.5 いろいろな組込み OS ▶ 18 コラム TRONとは ……………………………………………………………… 20

第2章 国産リアルタイムOS µITRONの機能 ………………………… 22 2.1 µ ITRONの特徴 ……………………………………………………………… 22 2.2 µ ITRONはサービスコールで動く ………………………………………… 23 2.3 オブジェクトとは …………………………………………………………… 25 2.4 システムの状態遷移 ………………………………………………………… 27 2.5 タスク ………………………………………………………………………… 28 2.5.1 タスクとは ▶ 28 2.5.2 タスクの状態遷移 ▶ 30 2.6 µ ITRONの心臓部 タスクのスケジューリング ………………………… 32 2.6.1 プリエンプティブとノンプリエンプティブ ▶ 32 2.6.2 優先度ベーススケジューリングと FCFSスケジューリング ▶ 33 2.6.3 イベントドリブンスケジューリング ▶ 36 2.6.4 ラウンドロビンスケジューリング ▶ 38 2.6.5 マルチタスク動作の原理 ▶ 41 2.7 タスク間の同期と通信 ……………………………………………………… 44 2.7.1 同期・通信の考え方 ▶ 44

もくじもくじ

基 礎 編

巻頭.indd 3 2007/12/21 10:11:21

Page 7: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

もくじ

iv

2.7.2 タスク付属同期 ▶ 45 2.7.3 イベントフラグによる同期・通信 ▶ 48 2.7.4 セマフォによる排他制御 ▶ 59 2.7.5 メールボックスによるメッセージ通信 ▶ 66 2.7.6 データキューによるメッセージ通信 ▶ 72 2.8 割込み管理 …………………………………………………………………… 75 2.8.1 CPUの割込み処理 ▶ 76 2.8.2 割込みハンドラのスケジューリング ▶ 77 2.9 時間管理 ……………………………………………………………………… 81 2.10 メモリ管理 …………………………………………………………………… 87 2.11 組込みシステムの構築方法 ………………………………………………… 90

第3章 簡易型 µITRON SmalightOS…………………………………… 94 3.1 Smalight OSとは …………………………………………………………… 94 3.2 Smalight OSの特徴 ………………………………………………………… 94 3.3 Smalight OSの機能 ………………………………………………………… 96 3.3.1 スケジューリング ▶ 97 3.3.2 システム状態遷移 ▶ 97 3.3.3 タスク関連機能 ▶ 99 3.3.4 同期・通信機能 ▶ 101 3.3.5 割込み管理機能 ▶ 106 3.3.6 時間管理機能 ▶ 111 3.4 Smalight OSの起動 ………………………………………………………… 114

第4章 リアルタイムOSを用いたシステム開発の流れ …………………118 4.1 開発手順 ……………………………………………………………………… 118 4.1.1 開発作業の流れ ▶ 118 4.1.2 オブジェクト仕様書 ▶ 120 4.1.3 オブジェクト関連図 ▶ 120 4.1.4 シーケンス図 ▶ 121 4.2 コンフィギュレーション …………………………………………………… 122 4.2.1 タスクの登録 ▶ 123 4.2.2 タスク以外のオブジェクトの登録 ▶ 124 4.2.3 サービスコールの選択 ▶ 125 4.2.4 時間管理のための設定 ▶ 125

実 践 編

巻頭.indd 4 2007/12/21 10:11:22

Page 8: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

もくじ

v

4.2.5 ベクタテーブルと割込みの設定 ▶ 126 4.3 ロードモジュールの生成とデバッグの手法 ……………………………… 126 4.3.1 ロードモジュールの生成 ▶ 127 4.3.2 デバッグ ▶ 127 4.3.3 HEWのデバッギングエクステンション ▶ 128 4.3.4 システムリソースの検討 ▶ 128

第5章 演習用の開発環境とコンフィギュレーション………………………130 5.1 開発環境 ……………………………………………………………………… 130 5.1.1 Smalight OS ▶ 130 5.1.2 HEW ▶ 131 5.1.3 E8aエミュレータ ▶ 132 5.1.4 マイコンボードと制御対象 ▶ 132 5.2 Smalight OS のコンフィギュレーション ………………………………… 133 5.2.1 タスクの登録 ▶ 133 5.2.2 タスク以外のオブジェクトの登録 ▶ 135 5.2.3 その他の設定 ▶ 136 5.2.4 システム時刻の更新 ▶ 137 5.3 システムリソース …………………………………………………………… 141 5.3.1 ビルド結果でメモリ消費量を確認 ▶ 141 5.3.2 スタックサイズの設定 ▶ 142 5.4 コンフィギュレータ ………………………………………………………… 144 5.4.1 コンフィギュレータの役割 ▶ 144 5.4.2 コンフィギュレータの使い方 ▶ 145

第6章 サービスコールによるスケジューリングの実際……………………149 6.1 基本的なスケジューリング ………………………………………………… 149 6.1.1 タスクの三つの状態 ▶ 149 6.1.2 マルチタスク状態 ▶ 150 6.1.3 タスクの初期状態 ▶ 150 6.2 スケジューリングの基本形 ………………………………………………… 150 6.2.1 slp_tskと wup_tskによるスケジューリング ▶ 150 6.2.2 sample 1のシーケンス図 ▶ 154 6.2.3 プライオリティタスクとローテーションタスク ▶ 156 6.3 時間管理機能 ………………………………………………………………… 157 6.3.1 周期ハンドラの仕組み ▶ 157 6.3.2 周期ハンドラを使ってみる ▶ 158

巻頭.indd 5 2007/12/21 10:11:22

Page 9: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

もくじ

vi

6.4 タスク間の通信 ……………………………………………………………… 161 6.4.1 イベントフラグを使ったデータの受け渡し ▶ 161 6.4.2 データキューを使ったデータの受け渡し ▶ 164 6.4.3 プライオリティタスクとローテーションタスクの組み合わせ ▶ 166 6.5 時間管理機能の応用 ………………………………………………………… 170 6.5.1 アラームハンドラ ▶ 170 6.5.2 スイッチ長押し検出の工夫 ▶ 170

第7章 スイッチと LEDのシステムを制御する演習………………………176 7.1 制御対象のシステム ………………………………………………………… 176 7.1.1 システムの概要 ▶ 176 7.1.2 リアルタイム OSを用いない場合 ▶ 178 7.1.3 タスク分割の例 ▶ 178 7.1.4 設計と製作 ▶ 180 7.2 イベントフラグの役割 ……………………………………………………… 181 7.3 タスクの例 …………………………………………………………………… 182 7.3.1 alarm ▶ 182 7.3.2 dip_sw ▶ 183 7.3.3 calc ▶ 184 7.3.4 sw_sense ▶ 185 7.4 コンフィギュレーション …………………………………………………… 186 7.5 演習を進めるときの注意点 ………………………………………………… 187 7.5.1 ハードウェアのイニシャライズ ▶ 187 7.5.2 演習の手順 ▶ 188 7.5.3 チャタリング ▶ 188 7.5.4 応用 ▶ 189

第8章 ロボット制御への応用例………………………………………………190 8.1 試作ロボットの仕様 ………………………………………………………… 190 8.1.1 自律走行ロボットの概要 ▶ 190 8.1.2 自律走行ロボットの基本動作と構成部品 ▶ 192 8.2 従来型の制御プログラム …………………………………………………… 194 8.3 Smalight OSによる制御プログラム ……………………………………… 194 8.3.1 使用するオブジェクト ▶ 195 8.3.2 スケジューリングの考え方 ▶ 195 8.3.3 オブジェクト関連図とシーケンス図 ▶ 196 8.4 イベントフラグ ……………………………………………………………… 198

巻頭.indd 6 2007/12/21 10:11:22

Page 10: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

もくじ

vii

8.5 タスクの概要 ………………………………………………………………… 199 8.5.1 赤外線検出タスク ▶ 199 8.5.2 可視光線検出タスク ▶ 200 8.5.3 超音波検出タスク ▶ 201 8.5.4 全体を制御する controlタスク ▶ 202 8.5.5 モータ制御タスク ▶ 204 8.5.6 モータ速度制御タスク ▶ 205 8.6 その他の関数 ………………………………………………………………… 205 8.7 コンフィギュレーションとハードウェアのイニシャライズ …………… 206

付録1 ソフト開発ツール ……………………………………………………210 付 1.1 ルネサスエレクトロニクス製統合開発環境 HEW ……………………… 210 付 1.1.1 HEWのプロジェクト設定 ▶ 210 付 1.1.2 オプションの設定 ▶ 212 付 1.1.3 ビルドの手順 ▶ 214 付 1.2 エミュレータ ………………………………………………………………… 214 付 1.2.1 エミュレータの接続 ▶ 215 付 1.2.2 ユーザプログラムのロードと実行 ▶ 217 付 1.2.3 デバッグ ▶ 219 付 1.3 I/O演習ボード ………………………………………………………………… 222

付録2 各種ツール,ハードウェアの入手方法 ……………………………223 付 2.1 ソフト開発ツールの入手方法 ……………………………………………… 223 付 2.1.1 Smalight OS ▶ 223 付 2.1.2 Cコンパイラ無償評価版と HEW ▶ 223 付 2.1.3 E8aエミュレータ用ドライバとプログラム ▶ 223 付 2.1.4 マニュアル類の入手方法 ▶ 224 付 2.2 各種ハードウェアの発売元など …………………………………………… 224 付 2.2.1 北斗電子 ▶ 224 付 2.2.2 サンハヤト ▶ 225 付 2.2.3 E8aエミュレータ ▶ 225 付 2.2.4 エレキット ▶ 225 付 2.2.5 千石電商 ▶ 225 付 2.2.6 秋月電子通商 ▶ 225

さくいん …………………………………………………………………………226

巻頭.indd 7 2011/02/14 10:17:07

Page 11: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

様々な機器に組込まれて制御を行うコンピュータシステムのことを組込みシス

テムといいます.近年ではこの組込みシステムが様々な分野で数多く製造・販売

されています.組込みシステムの心臓部として動作するソフトウェアが組込み向

けリアルタイムOSです.本章では,組込みシステムとはどういうものなのか,

リアルタイムOSとは何か,そして,リアルタイムOSが組込みシステムになぜ

必要なのかを解説していきます.

組込みシステムとは,様々な機器に組込まれて制御を行うコンピュータシステムのことであり,パソコンやスーパーコンピュータのような汎用コンピュータシステム以外のすべてのコンピュータシステムであるといっていいでしょう.表 1.1に組込みシステムの例を示します.組込みシステムの範囲は非常に幅広く,たとえば皆さんの家庭にある炊飯器,電子

レンジやエアコンといった電化製品もそうですし,テレビやビデオ,それから学校や会社にあるプリンタやコピー機,それから携帯電話,ゲーム機,カーナビ,カラオケなどもそうです.大きなものになるとロボット,人工衛星あるいはロケットも組込みシステムの範囲です.これらのシステムにはすべてマイコンが入っており,それぞれのシステムに固有な制御を行っています.当初,マイコンは電卓や計算システム用途を中心に組込まれていましたが,マイコ

ンの低コスト化,高性能化に伴い,FA(Factory Automation)制御システムから民生機器まで様々な組込みシステムへ導入されるようになってきました.

1.1 組込みシステムとは

第1章

組込み向けリアルタイム OS概論

第1章.indd 2 2007/12/21 10:13:40

Page 12: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

1.2 組込みシステムのソフトウェアとハードウェア

次に,組込みシステムのソフトウェアとハードウェアの構成を考えてみましょう.組込みシステムは,センサ,モータ,その他の電子回路,マイコン,そして,メモリ(ROM,RAM)からなるハードウェアと,これらの様々なハードウェアを制御させるためにマイコン上で動作するソフトウェアで構成されています.組込みシステムは,これらのハードウェアとソフトウェアが協調してお互いの動作

を監視しタイミングを合わせながら動作します.具体的には,何らかの入力(スイッチ,センサ,外部からの信号など)がきっかけになって,その入力に従って CPUが演算処理を行い,演算結果をもとにデジタル信号を外部の出力装置に出力したり,アクチェータを使って出力データを変換することによって何らかの物理的動作を行った

分 野 機 器 分 野 機 器

工業制御 /FA機器 

■プラント制御■工業用ロボット 設備機器

■エレベータ■ビル用照明■ビル用空調

AV機器

■テレビ■ビデオ■デジタルカメラ■オーディオ機器

運輸機器

■自動車■鉄道車両■航空機■船舶

情報機器■ PDA■電子手帳

娯楽 /教育機器

■ゲーム機■電子楽器■カラオケ

通信機器

■電話機■携帯電話■交換機■ルータ

白物家電

■電子レンジ■炊飯器■冷蔵庫■洗濯機■エアコン

PC周辺 /OA機器

■プリンタ■スキャナ■ FAX

表 1.1 組込みシステムの例

1.2 組込みシステムのソフトウェアとハードウェア

第1章.indd 3 2007/12/21 10:13:44

Page 13: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

第1章 組込み向けリアルタイムOS概論

りします.実際に動作するソフトウェア(プログラム)は ROMに記憶させておいて,一時的に蓄えたり書き換えを行うデータは RAMに記憶させておきます.図 1.1にエアコンの例を示します.マイコンへの入力はリモコンからの操作指令,

室温センサ,明るさセンサ,外気温センサ,着霜センサなどです.出力は,コンプレッサの運転指令,室内機ファン,室外機ファン,冷媒の流路切り替え(四方弁)指令,運転状態の表示,除霜ヒータなどです.また,コンプレッサの出力を制御するためのデジタル信号を作る必要があります.エアコンは室温を快適に保っために,これらの非同期に(予測できないタイミング

で)発生する多数の入力を受けて,そのときに一番必要な運転状態を決定し出力を行います.

このように,組込みシステムは,スイッチ,センサなどの入力が多数存在し,それらを並行して監視しながらリアルタイムに制御して出力を出していくのが普通です.この並行処理を実現するために生まれたのが組込み向けリアルタイム OSです.これについては 1.4節以降で詳しく解説していきますので,ここでは,組込みシステムのイメージをつかんでもらえばよいでしょう.

組込みシステムの全体のイメージをつかめたところで,汎用コンピュータシステムの代表として皆さんが日頃よく使っているパソコンと比較しながら,組込みシステムの特性をまとめていきましょう.

CPU

ROM RAM

四方弁

室内機ファン

表示部品

室外機ファン

コンプレッサ

明るさセンサ

外気温センサ

着霜センサ

室温センサ

リモコン

入力マイコン

出力

デジタル信号

デジタル信号

CPU

図 1.1 エアコンのハードウェア

1.3 組込みシステムの特性

第1章.indd 4 2007/12/21 10:13:46

Page 14: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

1.3 組込みシステムの特性

パソコンは,高い計算能力をもつと同時に拡張性をもっており,あとでソフトウェアをインストールしたりすることができます.人間はパソコンを使って演算をしたり,表や図を作成したり,インターネットで調べものをしたり,メールで通信したり,画像や音楽データを楽しんだりと実に様々なことができます.このように,パソコンは特定用途に限らず様々な用途で使用することができるので汎用コンピュータシステムといえます.それに対し組込みシステムは,エアコン,ビデオ,コピー機の例のように,ある決

まった特定の処理だけを行うために専用化されたシステムであるといえます.つまり,その専用機能を実現するためだけのソフトウェアがシステムに組込まれていればよいことになります.ハードウェアも専用機能を実現するためだけに最適化されたものになっています.また,パソコンは,コンピュータであることを意識して使いますが,組込みシステ

ムには,コンピュータであることを意識しないで使っているものも多く存在します.たとえば,エレベータは勝手に制御を行うし,高速道路のインターに設置してあるETCは,車が通過すれば勝手に通信をしてくれます.

マルチタスク動作とは,一つのマイコン上で複数の処理があたかも同時に実行されているかのように動作することで,並行動作ともいいます.また,並行動作を行う上で必要になる独立した各々の処理プログラムをタスクといいます.図 1.2で,デジタルビデオカメラの場合,テープ記憶プログラム,ボタン監視プログラム,映像入力プ

1.3.1 専用化システム

1.3.2 マルチタスク

各ソフトウェアが独立して,単独で意味のある処理を行う

Windows上で動作する

表計算ソフト メーラ

ワープロ ブラウザ

テープ記録 ボタン監視

映像入力 音声入力

組込みOS上で動作

複数のプログラムが協調しあって動作して,全体でひとつの意味のある処理を行う

パソコン デジタルビデオカメラ

図 1.2 パソコンと組込みシステムの比較

第1章.indd 5 2007/12/21 10:13:48

Page 15: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

第1章 組込み向けリアルタイムOS概論

ログラム,音声入力プログラムそれぞれがタスクです.パソコンの場合は,ワープロソフト,表計算ソフト,メーラ,ブラウザがタスクに相当します.マルチタスクという意味では,パソコンも組込みシステムも同じマルチタスクシス

テムといいます.図 1.2にパソコンと組込みシステムの比較を示します.はじめに,パソコン上でアプリケーションソフトを使用することを考えてみましょ

う.パソコンはキーボードやマウスなどの外部装置を操作することによって,ワープロソフト,表計算ソフト,メーラやブラウザなどの異なったソフトウェアを動かすことができます.たいていの場合,これらのソフトウェア(プログラム)はそれぞれ単独で動いていて,人間が必要に応じてアイコンをクリックすることで,必要なソフトウェアに切り替えます.このソフトウェアの切り替え処理は,Windowsのようなパソコン OSが行っています.次に,組込みシステムの一例としてデジタルビデオカメラを考えてみましょう.デ

ジタルビデオカメラは,録画ボタンを押すとカメラから撮った映像と音声が同時にテープなどに記録されます.これは,人間が録画ボタンを押すことによって,ボタンを監視するプログラムが起動して,そのプログラムから映像入力プログラム,音声入力プログラム,それからテープ記憶プログラムをそれぞれ起動して,これらの異なる複数のプログラムが互いに協調しあいながら,あたかも一つのマイコン上で同時に動いているかのごとく,全体で一つのシステムとして動作しているのです.このように組込みシステムは,複数の異なった機能をもっている別々のプログラム

を協調して動かすことによって一つの専用システムを作り上げていますが,この協調動作は,組込み向けリアルタイム OSが実現しています.

組込みシステムは,マルチタスクシステムとしてシステム内部で複数のタスクが並行動作するだけでなく,外部からの事象によって今まで動作していたタスクから,必要なタスクへすばやく切り替わることによって応答動作を行うことが求められます.たとえば,人間がスイッチを押すことで今まで処理していたことを停止して,すばやく別の処理を開始したり,通信回線からの信号入力に応じて,それに応じた処理をしたり,センサが感知した外部情報(温度,湿度など)に応じて協調動作を行ったりします.このように,非同期に(予測できないタイミングで)発生する外部からの事象に対

して,ある限られた時間内(デッドライン内)にすばやく応答動作を行うことをリアルタイム性といいます.ここで重要なのは,事象に対する応答動作や演算処理自体を正確に行うことはもちろんのこと,外部からの入力に対して決まった時間内(デッド

1.3.3 リアルタイム性

第1章.indd 6 2007/12/21 10:13:48

Page 16: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

7

1.3 組込みシステムの特性

ライン内)で応答動作が求められることです.たとえば,図 1.3に示すような自動車のエアバック制御では,通常の運転操作の途

中であっても,外部からの衝突という事象を感知してエアバックの制御へすばやく切り替わるリアルタイム性が求められます.応答制御がデッドラインを超えてしまったら適切な処理ができなくなってしまいます.組込みシステムでは,マルチタスク動作と同時にリアルタイム性を実現することが非常に重要になります.

組込みシステムは,開発する上で様々な制約が出てきます.たとえば,電子部品が載ったハードウェア基板の小型化や軽量化のための工夫が必要だったり,パソコンと違ってメモリ容量も限られたりするためプログラムサイズも制限されます.また,使用環境によっては高温あるいは低温での使用なども考慮する必要もあります.携帯電話などはバッテリ駆動のため,低消費電力化も考慮しないと製品としての価値がなくなる場合もあります.なおかつ,デザインもよいものでないと売り物になりません.さらに,せっかくよいものを作っても,市場投入のタイミングが遅れるとメーカ側は

売り上げを上げることができません.もちろん,価格が高すぎても売れませんので,こういったすべてのことを考慮しながら常にコストダウンを考えていく必要があります.このように,組込みシステムを製品として市場投入することは,並大抵のことでは

ありません.逆にいえば,こういった制約を乗り越えて出来上がった製品が市場に出て,一般の方に使っていただけるというのは,組込みシステムを作る側にとってはとてもやりがいのあることでもあります.

エンジン制御ミッション制御ブレーキ制御エアコン制御

エアバック制御

どんな処理をを

している場合でも,,

衝突

時間

応答 再開

デッドライン衝突感知から,決まった時間内に応答し,エアバック 行

衝突 感知して今まで行っていた処理を中断

制御が .われる

図 1.3 エアバックのリアルタイム性

1.3.4 厳しい制約下での製品リリース

第1章.indd 7 2007/12/21 10:13:49

Page 17: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

第1章 組込み向けリアルタイムOS概論

組込みシステムに対する要望は年々高まってきており,特に高い信頼性が強く求められます.たとえば自動車の制御においては人命に関わるため高い信頼性が必要です.また近年では家電製品の不具合によるトラブル,銀行のシステムダウンや航空管理システムダウンといったトラブルが散見されます.組込みシステムにおいてもこういったトラブル,事故が発生しないよう信頼性を高めていく必要があります.仮に市場で不具合が発生してしまうと,開発したメーカ側がこれらを回収して修正

しなければならないといった社会的責任も課せられ多大なコストがかかってしまうのです.このように,組込みシステムにおける信頼性確保は非常に重要な課題になっています.

これまでに組込みシステムとはどういうものかを解説してきましたが,ここからは組込みシステムの中に実際に搭載されていて,その心臓部として動作している組込み向けリアルタイム OSについて解説していきましょう.

1.3節で説明したとおり,組込みシステムは,リアルタイム・マルチタスクシステムであり,多くの制約があるため決して実現が容易なものではありませんが,リアルタイム OSの導入が,これを容易にしてくれます.図 1.4にリアルタイム OSの役割を示します.リアルタイム OSは,常時,複数のタスクが実行するための情報を管理していて,その情報にもとづいて,随時タスクの実行順序を決めてくれます.それによって複数のタスクの並行動作を実現します.それから,タスクが使用するソフトウェアおよびハードウェア資源,たとえば

CPU,メモリ,タイマなどのマイコンを支えている周辺のハードウェアなどについて,その使用権を許可したり,禁止したり,あるいは,諸資源の競合(一つしかないある資源を複数のタスクがうばいあうこと)の回避などもやってくれます.また,非同期に発生する外部事象(割込み)に即時に応答して,緊急に動作すべきタスクへの実行制御も行います.図 1.5にリアルタイム OSによるリアルタイム・マルチタスク処理の様子を示しま

1.3.5 信頼性の要求

1.4 組込み向けリアルタイムOSとは

1.4.1 リアルタイムOSの役割

第1章.indd 8 2007/12/21 10:13:50

Page 18: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos
Page 19: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

118

リアルタイム OS のシステムに限りませんが,システムを開発するときは最初

の設計が重要です.この章では,リアルタイム OS を用いて組込みソフトウェ

アを開発するときの,作業の流れを説明します.第 6 章以降の実機を用いた演

習では,第 3 章で説明した Smalight OS という OS を使いますが,ここでは

ルネサスエレクトロニクス製の µITRON 仕様 OS である HI7000/4 シリーズと

Smalight OS に共通する項目を主として取りあげます.

リアルタイム OSを用いない従来方式のソフトウェアについては開発・設計の流れが確立されていますが,リアルタイム OSを用いたシステムの設計の流れは,確立されているとはいいがたい状況です.そこでこの節では,設計段階でシステム全体の動作を表現するために,どのようなドキュメントを作成すればよいかを考えます.

従来方式のソフトウェア開発では,外部仕様(入出力の定義)を決定したあと,内部の詳細設計ではモジュールごとの仕様書のほかに,構造化設計のための図式やフローチャートで流れの設計をします.普通の C言語のプログラムでは,割込み処理を除けば関数呼び出しでプログラムの流れが決まり,その流れは図式で容易に表現できます.しかし,リアルタイム OSでは流れの制御の方法が異なるので,フローチャートな

どではうまく表現できません.そこで筆者は,オブジェクト仕様書,オブジェクト関連図,シーケンス図の組み合わせで設計するのがよいと考えています.本書では図 4.1のような手順を想定して説明を進めます.図 4.1の手順の中で,②のタスク分

4.1 開発手順

第4章

リアルタイム OSを用いたシステムの開発の流れ

4.1.1 開発作業の流れ

第4章.indd 118 2011/02/14 11:33:20

Page 20: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

119

4.1 開発手順

割,③の設計ドキュメント作成,⑤のコンフィギュレーションは組込みシステム特有のステップです.タスク分割というのは,内部設計の段階でタスクを定義し,必要な処理を分割して各タスクに割り当てる作業です.従来方式のソフトウェア開発ではモジュール分割(関数の定義)に相当します.タスク分割は,従来方式のモジュール分割と同様に,全体の処理をどのような規模

で細分化するかをよく検討する必要があります.リアルタイム OSでは,1.4.3項で説明したように,タスクを部品化して別のソフトウェアで再利用することが開発効率の向上につながります.そこで,リアルタイム OSを実際の製品設計に応用する場合は,スイッチの検出など汎用性のあるタスクと,システム固有の処理を行うタスクを分けて考えることが求められます.また部品化のためには,大規模なタスクより,機能を絞り込んだ(単一機能の)タスクの方が望ましいと言えます.コンフィギュレーションについては第 5章でくわしく説明します.

①外部設計

③設計ドキュメント作成  オブジェクト仕様書  オブジェクト関連図  シーケンス図

④プログラミング

⑤コンフィギュレーション

⑥ビルド(コンパイル&リンク)

②内部設計,タスク分割

⑦実装(ROMに書き込み)

⑧デバッグ

図 4.1 リアルタイムOSを用いたシステムの開発の流れ

第4章.indd 119 2007/12/21 10:20:51

Page 21: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

120

第 4章 リアルタイムOSを用いたシステムの開発の流れ

開発・設計作業では,内部設計の段階でシステムの処理内容をいくつかのタスクに分割し,各タスクの役割とタスク間通信などのオブジェクトの仕様を決めて一覧表にします.割込みハンドラ(割込み処理関数)は,本来はオブジェクトではありませんが,設計段階ではオブジェクトに含めておきます.このタスク,オブジェクト,割込みハンドラを一覧表にしたものがオブジェクト仕様書です.第 6章のシステム例ではオブジェクト一覧表として書いていますが,きちんと仕様書化するときは,タスクであれば優先度,使用するサービスコール,入出力など,フラグであれば発行および参照されるタスクも表に書き入れて完成させるのがよいでしょう.実験用の試作であれば,簡略化したものでかまいません.表 4.1は第 6章で説明する sample5で使用するオブジェクトの一覧表ですが,処

理内容を三つのタスクに分割し,また周期ハンドラで 100 msの時間間隔を発生させています.タスク間の同期と通信には四つのイベントフラグを用います.intTimという disp有割込みハンドラが一つ用意されていますが,システム時刻を更新するためのもので,時間管理機能に必須です.

図 4.2は,sample5のオブジェクト関連図です.オブジェクト関連図とはオブジェクト仕様書で定義した各オブジェクトの関係を示していて,システム全体を把握するために重要な図です.タスク間の同期・通信の様子,周期ハンドラとタスクの関係が示されています.タスクの左肩の数字は ID番号です.現時点では決まった書き方があるわけではないので,見やすいように工夫をしてみ

種 類 名 称 内 容

プライオリティタスク alarm 1秒のアラーム

プライオリティタスク Main_Task 加算と赤色 LED表示

ローテーションタスク sw_sense プッシュスイッチの監視

周期ハンドラ cyc 100 msの時間間隔作成

disp有割込み intTim システム時刻更新

イベントフラグ フラグ 1 時間間隔通知

イベントフラグ フラグ 2 プッシュスイッチ押しフラグ

イベントフラグ フラグ 3 プッシュスイッチ離しフラグ

イベントフラグ フラグ 4 状態変数

表 4.1 sample5 のオブジェクト一覧表

4.1.3 オブジェクト関連図

4.1.2 オブジェクト仕様書

第4章.indd 120 2007/12/21 10:20:52

Page 22: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

121

4.1 開発手順

るとよいでしょう.たとえばフラグのビットごとの意味を書き込んだり,矢印の部分に各タスクが発行するサービスコールを書き込んだりすることが考えられます.

図 4.2でシステム全体の構成はつかめますが,各タスクの状態がどのように変化していくか,時間の流れは表現されていません.そこで,時間の流れを横軸にとったシーケンス図を書きます.図 4.3は,sample5を表現したシーケンス図の例です.オブジェクト関連図と合わ

せてみるとシステムの動きがつかめます.ただしこの図は見やすくするために情報をいくつか省略した概略シーケンス図です.この書き方の場合は,ある時点でどのタスクが READYになっているかという情報が含まれないので,タスクの数が多くなってレディキューにいくつものタスクが待っている場合には,動作がつかみ切れません.図 4.4は,第 6章の sample1のシーケンス図です.この図では,各タスクの

RUNNING,READY,WAITINGの三つの状態が区別して表現されていて,さらにスケジューリングにかかわるサービスコールも記入されているので,正確な流れがわかります.しかし二つのタスクでもこの程度の図になるので,タスクが増えてくると大規模な図になってしまいます.見やすくするためには,どのスイッチが押されたか,

SW押し・離し通知

フラグ2,3

フラグ4

1

3

2

alarm 周期ハンドラ

(長押し成立の場合)

sw_sense

Main_Taskモード

起床

フラグ1

100 ms

(長押し成立の場合)

図 4.2 sample5 のオブジェクト関連図

4.1.4 シーケンス図

第4章.indd 121 2007/12/21 10:20:52

Page 23: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

122

第 4章 リアルタイムOSを用いたシステムの開発の流れ

どのフラグが立ったかなどの場合分けをして複数のシーケンス図に分割する必要があります.また,タスクの目的によりグループ分けをして,図を分割することも必要になるでしょう.

2.11節で説明したように,リアルタイム OSのシステムは,個々のシステムごとに

時間

wai_flg

set_flg

wai_flgwup_tsk

set_flg

slp_tskslp_tsk

Key_A

Main_Task

スイッチが押された スイッチが押された

サービスコールRUNNING

READY

WAITING

図 4.4 sample1 のシーケンス図

wai_flg

iset_flgcyc

Main_Task(優先度2)

sw_sense(ローテーションタスク)

alarm(優先度1)

set_flg

wai_flg

wai_flg

set_flg

図 4.3 sample5 の概略シーケンス図

4.2 コンフィギュレーション

第4章.indd 122 2009/07/14 19:44:52

Page 24: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

123

4.2 コンフィギュレーション

カスタマイズされたものです.前節のオブジェクト仕様書で使用するオブジェクトを決めましたが,この仕様にもとづいて OSの最適化をするのがコンフィギュレーションという作業です.コンフィギュレーションの詳細は第 5章で説明しますが,この節では,どのような作業をするかの概要を説明します.図 4.5は,コンフィギュレーションの概略の手順です.

使用するタスクをあらかじめ登録します.タスクの名称だけでなく,表 4.2の優先度,タスク生成後の状態(システム起動時の状態),スタックのサイズなども同時に登録するのが普通です.”普通”といったのは,項目によってはシステム起動後にサービスコールで設定できるものもあるからです.

タスクの登録

オブジェクト登録

サービスコール選択

ハードウェア設定

コンフィギュレーション

時間管理設定

図 4.5 コンフィギュレーションの手順

4.2.1 タスクの登録

設定項目 HI7000/4 Smalight OS

ID番号 ○ ○

タスクの名称 ○ ○

生成後の状態 READY または DOMANT READYまたはWAITING

優先度 ○ (登録順)

タスクの種類ダイナミックスタックまたはスタティックスタック使用

プライオリティタスクまたはローテーションタスク

スタックサイズ ○ ○

表 4.2 タスクの設定項目

第4章.indd 123 2007/12/21 10:20:53

Page 25: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

124

第 4章 リアルタイムOSを用いたシステムの開発の流れ

タスクの本体は,C言語の関数の形で書かれていて ROM上に配置されていますが,2.6.5項で説明したように,それぞれのタスクがスタックとして RAM領域を使用します.マルチタスクシステムでは,多くのタスクは終了しない(永久ループになっている)ことに注意してください.タスクが RUNNING状態でサービスコールを発行すると,タスクの実行が中断されてカーネルに制御が移りますが,今までRUNNINGにいたタスクのデータは,各タスクのスタックに待避させられます.したがって,C言語の関数呼び出しと異なり,スタックはタスクごとに用意する必要があり,タスクを多く指定すると多くの RAMが必要になります.

タスク以外にも,同期と通信に使用するフラグ,データキュー,セマフォなどのオブジェクトがありますが,これらもあらかじめシステムに登録しておきます.イベントフラグのクリア指定など,属性が選択できる項目もあるので,コンフィギュレーションの段階で属性を指定します.代表的なオブジェクトの主要な登録項目を表 4.3に示します.それぞれのオブジェクトは RAM上に領域がとられるので,RAMの消費量を意識

する必要があります.

オブジェクト登録項目

HI7000/4 Smalight OS

イベントフラグ

ID番号 ID番号

OR待ちまたは AND待ち OR待ちまたは AND待ち

待ち解除時のクリア指定 待ち解除時のクリア指定

複数タスクの待ち許可 -

初期ビットパターン -

データキューID番号 ID番号

データ数 データ数

周期ハンドラ

ID番号 ID番号

ハンドラ名称 ハンドラ名称

起動周期 起動周期

生成後起動 生成後起動

起動時のカウント数 -

表 4.3 オブジェクトの登録

4.2.2 タスク以外のオブジェクトの登録

第4章.indd 124 2007/12/21 10:20:54

Page 26: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos
Page 27: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

190

Smalight OS によるリアルタイム OS システムの一つの応用例として,目標

を見つけて自律走行するロボットの制御システムを考えてみましょう.

ここでは,筆者が試作した図 8.1 のロボットを例として取りあげますが,考え

方に重点を置いて説明しますので,皆さんの身近に類似のロボットがあれば応用

してみてください.ロボットのシステム構成を図 8.2 に示します.

赤外光と可視光の光源を備えたゴールを見つけて自律走行するロボットの,概略の仕様を説明します.

制御対象は,2個のモータで車輪を駆動するプラ模型です.左右の駆動輪を別々に駆動するモータをもっています.

8.1 試作ロボットの仕様

第8章

ロボット制御への応用例

図 8.1 試作ロボットの写真

8.1.1 自律走行ロボットの概要

第8章.indd 190 2007/12/21 10:25:09

Page 28: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

191

8.1 試作ロボットの仕様

図 8.3の 4種類のセンサ(赤外光センサ,可視光センサ,超音波センサ,衝突検出スイッチ)からの入力により,図 8.2に示す構成でマイコンを使って 2個のモータの前進・後退と回転速度を制御しています.おおまかなイメージは,

①最初に赤外光センサでゴールの方向を見つけだし,②次にゴールに向かって走行しながら可視光センサの出力によって速度を調整し,③超音波センサでゴールの壁までの距離を測定して,ゴールの直前で停止する.④万一制御が不調でゴールに衝突してしまった場合は,衝突検出スイッチで割込みをかけて強制的に停止させる.

というものです.これらの制御を H8/3664Fマイコンで行います.

超音波ユニット

赤外光センサ

可視光センサ

衝突センサ

CPUボード〈H8/3664F〉

演算増幅器

モータ制御回路

インターフェイス回路

モータ駆動回路

CPUボード〈H8/3664F〉 モータ

駆動回路

図 8.2 システムの構成

図 8.3 各種センサの写真

超音波センサ

可視光センサ(左右 2 個)

衝突センサ赤外光センサ

第8章.indd 191 2007/12/21 10:25:11

Page 29: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

192

第 8章 ロボット制御への応用例

(1)走行メカベースになるメカはエレキットの「サッカーロボ」という自走ロボットで,左右の

車輪をそれぞれ専用のモータで駆動しています.片方のモータだけ回転させることにより,進行方向を変えることができます.(2)赤外光検出赤外光センサで目標(ゴール)の赤外光を検出するまでその場で回転し,目標を見

つけたら前進します.使用したセンサは,もとのサッカーロボのキットに付属していた赤外光検出器で,感度の関係でアナログ出力端子の信号をポートに入力しています.(3)可視光検出回路基板の前方左右に光センサを取り付けてあります.使用したセンサは東芝製のフォトトランジスタ TPS601A です.検出範囲を拡げるために,この出力をオペアンプで増幅してから A/D変換器に入力しています.光の強度を判別して,光が強くなったらゴールの壁が近づいたと判断してモータの

速度(PWM信号のデューティ比)を下げます.また,左右の入力を比較して,二つの入力の差が一定値以上になったら進行方向がゴールからずれたと判断して,光の強いほうへ曲がる(反対側のモータを駆動する)ように制御します.(4)壁までの距離測定超音波距離測定ユニットを搭載していてゴールの壁までの距離を測定し,衝突直前

に(壁まで 10 cmになったら)停止します.搭載したユニットは秋月電子製の組み立てキットで,回路中の T7というポイントから計測結果の距離をパルス幅で表した信号を得て,タイマWのインプットキャプチャ機能で距離を測定しています.(5)衝突の検知前方左右に衝突センサ(スイッチ)を取り付けてあります.正常に制御されていれ

ば衝突することはありませんが,万一制御に失敗した場合は衝突センサで衝突を検出し,割込み処理で停止させます.(6)マイコンボード図 8.4の北斗電子製マイコンボードを取り付けてあり,フラットケーブルで回路に

接続してあります.ルネサスエレクトロニクスの H8/3664Fを搭載しています.(7)モータの駆動駆動モータは左右のモータを個別に ON/OFFできます.また,マイコンから発生

する PWM信号で速度制御ができるようになっています.モータ駆動回路は東芝のモータ駆動用 ICを用いて自作しました.

8.1.2 自律走行ロボットの基本動作と構成部品

第8章.indd 192 2011/02/14 11:44:45

Page 30: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

193

8.1 試作ロボットの仕様

この回路では,左右の 2個のモータに対してそれぞれ“前進”“後退”の入力端子があり,どちらかに highの信号を与えるとその方向に回転します.間違って両方の端子に highを与えた場合はモータは停止します.各端子に PWM信号を与えると,信号が highのときだけモータに通電し,デューティ比によりモータの出力を制御することができます.タイマWを距離測定用に使っているため,PWM信号の生成はタイマ Vで行います.(8)電源回路電源は,誤動作を防ぐために制御回路用とモータ駆動用を分けてあります.回路用には単 3乾電池 4本の 6 V(公称値)の出力を 3端子レギュレータで 5 Vに

落として使用しています.モータ駆動回路には別に単 3乾電池 4本を用意して,こちらは 6 Vを直接供給しています.(9)ゴールロボットの目標になるゴールには,図 8.5に示すように段ボールの箱に赤外光源と可視光源が組込まれています.

図 8.4 マイコンボードの写真

図 8.5 ゴールの写真

赤外光源

可視光源

第8章.indd 193 2007/12/21 10:25:14

Page 31: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

194

第 8 章 ロボット制御への応用例

赤外光源は原型のサッカーロボ用のゴールを流用していて,赤外光 LEDが並んでいます.可視光源は単 3電池を使う小型の懐中電灯を 2本取り付けてあります.

このロボットをリアルタイム OSを用いない従来方式のプログラムで制御することを考えてみましょう.図 8.6は従来方式プログラムのオブジェクト関連図の例です.各センサ用の関数と

モータを制御する関数をmain関数から次々に呼び出す構造です.main関数は,各センサからのデータを戻り値で受け取って走行条件を決定し,モータの駆動条件を走行制御関数に引数として渡します.他に衝突検知は IRQ割込みで処理しています.

次に Smalight OSを使用したリアルタイム OSによる制御を考えます.ここで説明しているのはひとつの例で,タスクの分割の仕方,オブジェクトの使い

方は数多く考えられます.

8.2 従来型の制御プログラム

main 各種の初期化

赤外線センサからの入力

AD変換器からの入力

超音波ユニットからの入力

検出結果により速度・方向制御

割込み処理

イニシャライズ

赤外線検出

可視光検出

距離測定

走行制御

衝突検出

図 8.6 従来方式のプログラムのオブジェクト関連図の例

8.3 Smalight OS による制御プログラム

第8章.indd 194 2007/12/21 10:25:14

Page 32: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

195

8.3 Smalight OS による制御プログラム

表 8.1にタスクとオブジェクトの一覧表を示します.各センサにタスクを用意して,イベントフラグを使って検出データをコントロールタスク(control)に渡します.衝突だけは直接割込み処理をします.

衝突を除く各センサのタスクはローテーションタスクにして順番に検出を行い,一巡り検出したところでフラグをセットして,プライオリティタスクのcontrolタスクを起床させます.

controlタスクは,センサからのデータで進行方向と速度を決定して,進行方向を決めるmotorタスクと速度を制御する pwmタスクを起床させます.controlタスクがセンサのデータ待ちの wai_flgを発行してWAITINGに遷移すると,motorタスクと pwmタスクが順次起動してロボットの挙動を決めます.ここではセンサのデータを渡すためのフラグと controlタスクを起床させるための

フラグを分けて,データ用のフラグは twai_flgを用いた複数データのポーリング(待ち時間を 0に設定する)をしましたが,データキューを用いてセンサごとに個別に

8.3.1 使用するオブジェクト

表 8.1 ロボット制御システムのオブジェクト一覧表

種類 名称 内容

プライオリティタスク control センサ入力により走行状態を決定

プライオリティタスク motor 左右モータの回転 / 停止を制御

プライオリティタスク pwm モータの回転数を制御

ローテーションタスク IR_sense 赤外光センサからの入力

ローテーションタスク L_sense AD 変換器からの入力

ローテーションタスク US_sense 距離を示すパルス幅の計測

disp 有割込み intTim システム時刻更新

disp 有割込み irq_sw 衝突時の割込み処理

イベントフラグ フラグ 1 センサ検出フラグ

イベントフラグ フラグ 2 赤外光検出フラグ

イベントフラグ フラグ 3 可視光強さ 左

イベントフラグ フラグ 4 可視光強さ 右

イベントフラグ フラグ 5 壁までの距離

イベントフラグ フラグ 6 走行モードを表すフラグ

イベントフラグ フラグ 7 走行速度を表すフラグ

8.3.2 スケジューリングの考え方

第8章.indd 195 2007/12/21 10:25:15

Page 33: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

226

欧文Ⓐ

act_tsk ……………… 37,38

alarm handler …………… 84

AND待ち ………………… 52

API ………………………… 25

Ⓒclr_fl g …………………52,104

confi g.c …………………… 133

cre_sem ……………… 26,60

cre_tsk …………………… 26

CYC_ATTR ……………… 113

CYC_CHG ………………… 113

cyc_init …………………… 112

cyclic handler …………… 84

Ⓓdataque …………………… 72

disp ………… 108,110,137

dispatch …………………… 38

disp有割込みハンドラ … 107

disp有割込みハンドラ

受付部…………………… 109

disp有割込みハンドラ

本体……………………… 109

disp無割込みハンドラ … 107

DORMANT ……………… 31

DTQ_ATTR ……………… 106

dtq_init …………………… 106

ⒺE8aエミュレータ … 132,214

Embedded Linux ………… 19

ercd …………………… 26,83

eventfl ag ………………… 48

EVTFLG_ATTR ………… 105

evtfl g_init ………………… 104

ⒻFCFS ……………………… 33

FIFO ……………………… 57

Ⓖget_mpf …………………… 87

get_mpl …………………… 88

get_tim …………… 112,157

global変数 ……………… 162

ⒽHEW ………… 91,131,210

ⒾI/O演習ボード …… 132,222

idle ………… 114,115,127

ID番号 ……………… 25,97

int.src ……………………… 137

intTim …………………… 137

iodefi ne.h ………………… 211

irot_rdq ……… 39,41,100

iset_fl g ……… 49,50,104

isig_tim ……… 85,86,113

ITRON ……………… 18,20

iwup_tsk ……………46,100

Ⓚkernel ……………………… 22

kinit ……………… 114,135

ⓁLIFO ……………………… 43

Ⓜmailbox …………………… 67

massagebuffer …………… 75

memorypool ……………… 87

MMU ……………………… 87

mutex ……………………… 65

ⓃNON-EXISTENT ……… 31

non-preemptive ………… 32

ⓄOR待ち …………………… 52

OSEK/VDX ……………… 19

OS部 ……………………… 98

Ⓟpget_mpf ………………… 84

pol_fl g …………………… 84

pol_sem …………………… 84

pragma interrupt ……… 111

pragma noregsave 101,110

prcv_dtq ………………… 84

prcv_mbx ………………… 84

preempt …………………… 38

preemptive ……………… 32

Priority Inversion ……… 64

ⓇRAMの使用量 …………… 141

rcv_dtq … 73,74,105,164

rcv_mbf …………………… 75

rcv_mbx …………………… 68

READY …………………… 30

rel_mpf …………………… 87

rel_mpl …………………… 88

rot_rdq … 39,41,100,156

rsm_tsk …………………… 47

RUNNING ……………… 30

Ⓢsemaphore ……………… 59

set_fl g …… 49,50,104,162

sig_sem ……………… 61,62

slos.def …………………… 136

さくいんさくいん

索引.indd 226 2008/01/09 20:16:23

Page 34: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

227

さくいん

slos.hws …………… 131,210

slos_cyclic_timer ………… 113

slos_init …………………… 114

slp_tsk ………………………

37,38,45,46,99,150

Smalight OS …………94,130

Smalight OSのファイル構成

…………………………… 131

snd_dtq … 73,74,106,164

snd_mbf …………………… 75

snd_mbx ………………… 68

sta_alm …………………… 85

sta_cyc …………………… 85

stp_alm …………………… 85

stp_cyc …………………… 85

sus_tsk ……………… 45,47

SUSPENDED …………… 31

systim_init ……………… 112

TT-Engine ………………… 21

tget_mpf ………………… 84

T-Kernel ………………… 21

trcv_dtq ……………… 83,84

trcv_mbx ………………… 84

TRON ……………………… 20

tslp_tsk ………………83,100

twai_flg … 83,84,103,171

twai_sem …………… 83,84

Uuinit ……………… 114,139

Vvector.c …………………… 139

VxWorks ………………… 19

Wwai_flg … 49,50,103,162

wai_sem……………… 61,62

WAITING ………………… 31

WAITING-SUSPENDED … 31

Windows ………………… 16

Windows CE ……………… 19

wup_tsk ………………………

37,38,45,46,100,150

その他の欧文µ ITRON ………………… 22

µ ITRON4.0仕様 ………… 20

和文あ

アイドル…………………… 114

アプリケーションプログラム

…………………………… 16

アラームハンドラ……84,170

イベントドリブン方式…… 36

イベントドリブン

スケジューリング……… 36

イベントフラグ………48,159

イベントフラグのクリア… 52

イベントフラグのクリア指定

…………………………… 135

イベントフラグの

待ち条件………………… 52

引数………………………… 25

エミュレータ……………… 214

オブジェクト……………… 25

オブジェクト関連図……… 118

オブジェクト仕様書……… 118

オブジェクトの一覧表…… 120

オブジェクトの登録……… 124

かカーネル…………………… 22

カーネルマスクレベル…… 107

開発環境…………………… 130

開発作業の流れ…………… 118

可変長メモリプール……… 88

起動…………………… 30,31

起動要求…………………… 31

キュー構造……… 33,55,67

休止状態…………………… 31

競合回避…………………… 59

強制待ち状態……………… 31

組込みシステム……… 2,3,4

クリア指定…………… 52,58

固定長メモリプール……… 87

コンテキスト………… 28,43

コンフィギュレーション

…… 26,90,91,122,133

コンフィギュレータ…91,144

さサービスコール……… 11,23

サービスコールトレース… 128

サービスコールの選択…… 125

サンプルタイマドライバ… 125

シーケンス図……………… 118

時間管理…………………… 81

時間管理機能……… 125,157

システムコール…………… 23

システム時刻… 82,125,137

システム状態………… 27,97

システム初期化部………… 98

システムリソース………… 141

実行可能状態……………… 30

実行状態…………………… 30

時分割方式………………… 36

周期ハンドラ…………84,158

初期値付き変数…………… 213

スイッチ長押し検出……… 170

スケジューラ……… 114,149

スケジューリング

………… 32,33,36,149

スタック……… 43,76,129

索引.indd 227 2008/01/09 20:16:24

Page 35: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

さくいん

228

スタックサイズ…………… 136

生成………………………… 26

セマフォ…………………… 59

セマフォカウンタ………… 59

たタイマ割込みハンドラ

……………… 85,125,137

タイムアウト付きの

サービスコール………… 170

タイムシェアリング……… 36

タイムティック…………… 86

多重割込み………………… 79

タスク………………5,28,36

タスク間の通信…………… 161

タスク切替え……………… 36

タスクコンテキスト

……………………… 27,42

タスクの状態……………… 30

タスクのスタックサイズ… 143

タスクの登録……………… 123

タスクの三つの状態……… 149

タスク部…………………… 98

タスク付属同期…………… 45

タスク分割………… 119,178

タスク優先度………… 33,80

遅延ディスパッチ………… 78

チャタリング……………… 188

通信………………………… 44

ディスパッチ……………… 38

ディスパッチャ…… 114,115

データキュー…………72,164

デッドロック……………… 65

デバイスドライバ…… 15,16

デバッギングエクステンション

…………………………… 128

デバッグ…………… 126,214

テンプレート……………… 210

同期…………………… 24,44

同期・通信………………… 24

トロン……………………… 20

な二重待ち状態……………… 31

ノンプリエンプティブ…… 32

はハードウェアの初期化処理

…………………………… 139

排他制御……………… 59,61

引数………………………… 25

非タスクコンテキスト…… 27

ビルド……………………… 212

プライオリティタスク

……………… 97,156,166

プリエンプティブ………… 32

プリエンプト……………… 38

並行動作……………………… 5

ベクタテーブル…… 125,139

ポーリング処理…………… 10

ま待ち行列……………… 55,57

待ち状態…………………… 31

マップファイル…………… 141

マルチタスク………………… 5

マルチタスク動作………… 41

未登録状態………………… 31

ミドルウェア………… 15,16

ミューテックス…………… 65

メールボックス…………… 67

メッセージ通信…………… 66

メッセージバッファ……… 75

メッセージフォーマット… 69

メッセージヘッダ………… 69

メモリ管理………………… 87

メモリプール……………… 87

や優先度…………………33,166

優先度逆転………………… 64

優先度ベーススケジューリング

…………………………… 33

らラウンドロビン

スケジューリング……… 38

リアルタイム OS ……… 8,17

リアルタイム性……………… 6

リストファイル…………… 143

リターンパラメータ……… 83

レディキュー…………33,152

ローテーションタスク

……………… 97,156,166

ロードモジュールの生成… 126

わ割込み……………………… 76

割込み管理………………… 76

割込みハンドラ

……………… 28,77,139

割込み部…………………… 98

割込みベクタ……………… 77

割込みレベル……………… 79

索引.indd 228 2008/01/09 20:16:25

Page 36: 「図解 μITRONによる組込み システム入門」 サンプルページ · マイコンを制御するためのソフトウェアで構成されています. 最近,組込みシステム用のリアルタイムos

著 者 略 歴武井 正彦(たけい・まさひこ)

1989年 山形大学工学部情報工学科卒業1989年 日立米沢電子(株)(現在の(株)ルネサス北日本セミコンダクタ)

入社 µ ITRON仕様 OS,アプリケーションの開発に従事1996年 (株)日立製作所半導体事業部 µ ITRON仕様 OSのマーケティング,技術サポートに従事2004年 (株)ルネサス北日本セミコンダクタ 自社ソフトウェア製品のマーケティング,技術サポートに従事 トロン協会 教育グループ員としても活動 現在に至る

中島 敏彦(なかじま・としひこ)1968年 東京大学工学部産業機械工学科卒業1968年 (株)日立製作所入社 家電研究所にてマルチメディア機器の開発に従事1989年 技術教育部門に転属 日立グループ内の技術研修を担当2003年 (株)日立製作所退職 以後日立技術研修所の非常勤講師として現在に至る

著  書 「図解組込みマイコンの基礎」森北出版(2007)

図解 µ ITRONによる組込みシステム入門2008年 1月 25日 第1版第1刷発行     【本書の無断転載を禁ず】2011年 3月 1 日 第1版第3刷発行

著  者 武井正彦・中島敏彦発 行 者 森北博巳発 行 所 森北出版株式会社 東京都千代田区富士見 1-4-11(〒 102-0071) 電話 03-3265-8341/ FAX 03-3264-8709 http://morikita.co.jp/ 日本書籍出版協会・自然科学書協会・工学書協会 会員 <(社)出版者著作権管理機構 委託出版物>

落丁・乱丁本はお取替えいたします 印刷・製本 /日経印刷 組版 /プラウ 21

Printed in Japan/ ISBN978-4-627-78451-2

ⓒ 武井正彦・中島敏彦 2008

奥付.indd 229 2011/02/14 11:52:57