前回の講義のおさらい 組み込みソフトウェア工学 第 2 回組み込み OS の基本とその特徴 どんなものが組み込みシステムなのか? 身の回りの組み込み機器 インフラ系の組み込み機器 組み込みシステムのソフトウェア 人の持つノウハウ, すばやい処理, 複数の処理 組み込みシステムの定義 ハードウェアとソフトウェアが緊密に統合されたコンピュータシステム ハードウェア, ソフトウェアの共同開発 1 本日の内容 IT 技術者と組込み技術者の違い 組み込みOSの基本とその特徴 組み込みソフトウェアとは 簡単な組み込み機器の例 タスクについて デジタルカメラの例 割り込みを使った事例 タスク管理について RTOSにおけるタスク OS が無い機器の例 何が違うか? ソフトウェアの開発技術について基本的な違いはない あえていうのであれば扱うレイヤ ( 層 ) が違う 目に見える製品やモノ作りがある ハードウェアの知識が必要 ハードウェアの技術者との折衝が必要 組み込み技術者の方が技術に長く携われる 製造業の中では技術者の立場が確立されている 1 つの技術を極めるとキャリアが積みやすい ( 神になる!) RTOS を扱う ( 場合がある ) 3 情報工学セミナー第 1 回
組み込みエンジニアに求められるもの 組み込みソフトウェアとは 組み込み知識 ソフトウェア技術 電気, 機械の知識が必要になる C 言語で最初に記述する Hello, World 通常プログラムは main 関数から始まる では電源を入れたらすぐ動く組み込みシステムの場合は? 電気 電子回路論理回路 電子 電気技術 ( エレキ ) 機構設計技術 ( メカ ) メカトロニクス main 関数が動く前にはどんな処理が必要なのだろうか? main( ) printf( Hello, World! n ); どこに表示するのか? 表示する関数はあるのだろう? もし無ければどうするのか? 組み込みシステム開発で成功するにはハードウェアエンジニアとの適切なコミュニケーションを行うスキルを上げることが必要となる. プログラムが終了したらどんな処理が必要なのだろうか? 5 6 組み込みソフトウェアとは 組み込みソフトウェアとは C 言語で最初に記述する Hello, World 各種初期化 通常プログラムは main 関数から始まる CPUの初期化, 割込みベクタの設定, スタック領域の初 では電源を入れたらすぐ動く組み込みシステムの場合は? 期化, 各種変数の初期化, 入出力装置の初期化, など main 関数が動く前にはどんな処理が必要なのだろうか? main( ) printf( Hello, World! n ); プログラムが終了したらどんな処理が必要なのだろうか? 標準ライブラリ 入出力装置の処理, メモリ管理, どこに表示するのか? 表示する関数はあるのだろう? もし無ければどうするのか? 終了処理 入出力装置の終了処理, メモリの解放, 電源処理など 7 機能が単純で, システム規模が小さい場合 電源を切ら無い限り終了しない 初期化部分 main( ) while(1) 機能プログラム CPU は走り出したら止まらない 機能が複雑で, システム規模が大きい場合 初期化部分 統合管理 機能 (1) 機能 (2) 機能 (3) func1( ) プログラム return x; 終了処理 OS が各タスクの概念と待ちの状態を作る 8
簡単な組み込み機器例 簡単な組み込み機器例 ( 状態遷移 ) SCSI IF と IDE IF を変換する組み込み機器 SCSI SCSI IF SCSI 制御 メモリ CPU (Z80) バッファ制御 IDE IF 受信中 データの受信 送信中送信コマンドデータの送信 初期化 受信コマンド 待機 その他の処理 命令待ち コマンド 命令 命令はどこから来るのか? コマンド解析 SCSI LSI のセットアップ メモリへの DMA 設定 データ転送 1 IDE へのコマンド発行 メモリへの DMA 設定 データ転送 2 SCSI IF IDE IF IDE IF SCSI IF 非常に簡単な構造のプログラム CPU 9 10 簡単な組み込み機器例 ( 状態遷移 ) 簡単な組み込み機器例 受信中 データの受信 送信中送信コマンドデータの送信 初期化 受信コマンド 非常に簡単な構造のプログラム 待機 その他の処理 命令待ち コマンド 命令 コマンド解析 SCSI IF にデータあり? SCSI コマンド? 割込みの発生 SCSI の LSI に入ったデータによって割込み処理で命令を伝える 電源を入れたら動きっぱなし 仕事は同時に複数はこなせない 待機からの状態を変化させるには外部からの割込みが必要 プログラムの構造は非常に簡単 OS と呼べるものは不要となっている OS が無い組み込みシステムは割り込みが重要しかし, 割り込みを単に作成するだけでは問題となる 11 12
割り込みを使った処理 ( 電卓の例 ) 割り込みを使った処理 ( 電卓の例 ) 割り込みの優先度が無い例 割り込みの優先度がある例 文字入力の優先度を上げることで, 文字を読み取ることができる 通信回線 文字入力 割り込みの優先度が無いと電卓の文字が読み取れない 文字入力 通信回線 文字入力 電卓処理 PC の処理?????? 電卓処理 PC の処理 13 14 簡単な組み込み機器例 デジタルカメラのブロック図 電源を入れたら動きっぱなし レンズ 絞り ぶれ防止 カラー化雑音除去拡大他 仕事は同時に複数はこなせない 待機からの状態を変化させるには外部からの割込みが必要 ピント合わせ CCD 信号処理 メモリ 液晶モニタ プログラムの構造は非常に簡単 OS と呼べるものは不要となっている モータ制御 モータ制御 モータ制御 CPU シャッター各種ボタン 複雑な処理が複数あるような機器の場合はどうするのだろうか? 距離センサ 例えば.. デジタルカメラの場合には... 15 16
デジタルカメラのタスク構成と連携 画像取込み CCD タスク画像メモリ表示タスク 起動データ周期起動 記録画像情報 タスクとは何か ある機能を実現するために実行するプログラム プログラムの最小単位 タスクの実体は実は 関数 である モニタ 撮影完了 CF カート ジョブ (job), プロセス (process) とも言われる シャッタシャッタタスク撮影タスク全押半押合焦タスク合焦完了イベントによって必要なタスクが次々と動き 目的とする機能を実現 このための制御をするものが RTOS 17 18 ちなみに... デジタルカメラのタスクの複数動作 Task1 Task2 void task(.. ).. while(1).. タスクとソースコードは必ずしも一対一で存在するわけではない. 図のように 1 つの関数に対して 2 つのタスクが起動される場合もある. シャッタ画像取込みタスク表示タスク タスクは常に複数動作している画像取込みタスク表示タスク表示タスク タスクとは複数の並列した仕事を簡単に記述することができる. 複数の仕事を 1 つのタスクが行うのではなく, ある仕事を行うプログラムに対して複数のタスクを起動させた方が簡単で拡張性がある. 取り込んだ画像をそのまま表示 シャッタタスク合焦タスク撮影タスク 一定時間撮影された画像を表示する 画像を取り込み, 処理を行う 19 20
タスクの複数動作 RTOS の基本用語 複数のタスクが同時に動く 各タスクは即時対応が求められる 各タスクを管理するための仕組みとして RTOS (Real-Time OS) が必要となる RTOS を使うには以下の用語の知識が必要となる タスク ある機能を実現するためのプログラム. 複数のタスクを動かす為にタスクのスケジュールが必要となる セマフォ 複数のタスクが共有資源にアクセスをする場合の調整を行うためのもの メッセージキュー バッファのようなデータ構造を持つ. タスク間のメッセージの受け渡しにより, 同期制御, 排他制御, データ交換ができる 21 22 一般的な OS のタスク管理 リアルタイム性の優先度 理容店を 1 つのシステムとして考えてみると... リアルタイム性とは発生したイベントに対して決められた時間内に応答することが重要 処理 A の制限時間 マスター : 調髪弟子 : 顔剃り 弟子は何もすることがない マスターは何もすることがない 処理 A 処理 A の優先度 理容店にしてみればどんなお客でも同じ位大事なので, 店に入った順番で作業を行う. 優先度という考えがない. 次のお客が来るとマスターが対応 さらに次のお客が来るとどんなに急いでいても待つしかない 処理 B の制限時間 処理 B 処理 B の優先度 制限時間の短い処理の優先度を高くする 23 24
リアルタイム性の優先度 リアルタイム性の確保 リアルタイム性とは発生したイベントに対して決められた時間内に応答することが重要 朝食の準備を 1 つのシステムとして考えてみると... この間は待てる ランプを消す 全ての準備が整う 優先度 高 処理 Aの制限時間リアルタイムとは 直ぐに という意味処理 A 処理 Aの優先度 ではない!! 処理 B の制限時間 処理 B 処理 B の優先度 制限時間の短い処理の優先度を高くする 25 コーヒーの準備 パンの準備 目玉焼きの準備 この間は待てる サラダの準備 火を消す 発生するイベント毎に対応する時間が異なる 発生するイベントとその重要性で対応する優先度優先度を決めておく 低 26 組み込み環境下でのプログラミング RTOS のメリット RTOS を使うことで組み込みの動作環境を隠蔽することができる. RTOS を使うことでアプリケーションの世界と HW や FW の世界とが分離できる 各処理に対するリアルタイム性の確保 各処理のデッドラインを守れるかどうか アプリケーションをタスクに分割できる アプリケーション側と HW/FW を分離できる RTOS に標準装備されている API が使用可能 排他制御 ( セマフォ ) は困難でない デッドロックを避けることができる 各処理の記述は一般のPCのSWと似ている 27
ポーリング (polling) による処理 void main( void ) 初期化および割り込み処理開始 プログラム 装置 (c) に対する処理 装置 (a) に変化はあるか? 装置 (b) に変化はあるか? 装置 (c) に変化はあるか? 装置 (c) に変化あり! 再び装置 (a) を監視する 装置 (a) 装置 (b) 装置 (c) 装置 (d) 装置 (e) 順に装置の状態を確認することで, 全ての装置の状態を監視する 問題点ある装置の状態が変化しても, 優先されるわけではないので, 監視の順番が来るまで待つ必要がある.( 即応性がない ) 無限に繰り返す while(1) サンプル :mailloop.c if( 状況が Aのとき ) Aに対する処理 if( 状況が B のとき ) Bに対する処理 if( 状況が C のとき ) 割り込み処理よって状況が変化する C に対する処理 OS が無い機器のプログラム例 int proc_a ( void ) 割り込みの禁止 : 詳細処理 : 割り込みの許可 return rc; クーラーの場合の疑似コード while(1) if( 操作パネルの変化 ) 操作パネル用関数 if( 風量変化 ) 風量変化用関数 if( 方向の変化 ) 方向変化用関数 if ( 温度測定 ) 温度測定用関数 if ( 電流測定 ) 電流測定用関数 if ( 温度が設定を越えた && ファン停止 ) ファン回転関数 if ( 温度が設定に達した && ファン回転 ) ファン停止関数 割り込み処理 タイマー 1 割込関数 if( 温度測定 == 0 ) 温度測定 = 1; タイマー 2 割込関数 if ( 電流測定 == 0 ) 電流測定 = 1; 操作パネル割込関数 if( 風量ボタン == 1 ) 風量変化 = 1; if( 方向ボタン == 1 ) 方向変化 = 1; 実習機器 PIC 実習用ボード 実習用機構 BOX
実習用 CPU ボード 実習用 BOX スピーカー PIC書込用 コネクタ 実習用BOX 接続用コネクタ モーター 1 モーター自動停止 On/Off SW モーター 2 PIC書込用 リセットSW 電源コネクタ 5V LED LCD表示器 LED (4個) 実習用 ボード 接続ケーブル 電源コネクタ 9V を接続 フォトインタラプト センサーA ロータリー エンコーダ 切替用スイッチ インタラプタ or SW 電源スイッチ 押しボタンスイッチ A/B 押しボタンス イッチと LED 開発ツール MPLAB フォトインタラプト センサーB 本日の内容 組み込みOSの基本とその特徴 組み込みソフトウェアとは 簡単な組み込み機器の例 タスクについて デジタルカメラの例 割り込みを使った事例 タスク管理について RTOSにおけるタスク OS が無い機器の例 36