Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

リアルタイムOSの必要性とTOPPERS/SSPの紹介

組込みシステムにおけるリアルタイムOSの意義と,リアルタイムOSの一種であるTOPPERS/SSPの紹介

リアルタイムOSの必要性とTOPPERS/SSPの紹介

  1. 1. リアルタイムOS の必要性と TOPPERS/SSP の紹介
  2. 2. • この資料は,数年前に某所で開催したセミナーの 資料の焼き直しです. – 正直,話が古い部分もあると思います • TOPPERS/SSPカーネルの紹介 – SSPカーネルとはどのようなものか • 対象 – SSPカーネルに興味のある方 – 前提:C言語の基礎知識 • 内容 – 前半:リアルタイムOSとは – 後半:SSPカーネルとは(使い方は別スライドでまた) この資料について 2
  3. 3. • TOPPERS/SSPカーネルとは – TOPPERSプロジェクトで公開されている – 小規模組込みシステム向け – リアルタイムOS です. • SSPカーネルの説明に入る前に,簡単に 背景を説明します. – 組込みシステムとは,リアルタイムOSとは – TOPPERSプロジェクトとは TOPPERS/SSP とは 3
  4. 4. • 参考文献「12ステップで作 る 組込みOS自作入門」 – 初学者におすすめ – この本があればこのスライド のRTOSの説明いらないか も... http://kozos.jp/books/makeos/ そのまえに 4
  5. 5. 前提とする組込みシステム 5
  6. 6. 組込みシステム • 各種の機器に組み込んで, その制御を行う コンピュータシステム – 以前では,パソコンやワークステーションで はないコンピュータシステムはほぼ該当 * ぶっちゃけ,範囲広すぎ – 分類の難しいシステムもある(携帯電話とか) • 専用化したコンピュータシステム – この意味だと,測定器につながれたパソコン も組込みシステムになる 6
  7. 7. • 「TOPPERS開発成果物の採用事例」より http://www.toppers.jp/applications.html たとえば デジタルピアノ CASIO PX-850BK HDDデュプリケータ 株式会社ワイ・イー・シー Demi PG520 ロケット JAXA H-IIA型 ジェルジェットプリンタ リコー IPSiO GX e3300 7
  8. 8. • コンピュータ内蔵,プログラム制御 – プログラムでシステムを高付加価値化 – なにがしか実世界との接点がある • 特定の機能だけをもつ専用機 いずれも 8
  9. 9. • システムにより(ハード・ソフト)構成が異 なる. • 機能は動作中に変化しない. – 目的に専用化 • 時間制約に従う (リアルタイム性をもつ) – 動作環境や制御対象に合わせて動作できる * 単純に「速い」ということではなくて – 動けない場合でもひどい結果にならない 組込みシステムの特徴 9
  10. 10. たとえば... – 実行開始のタイミング * 周期的,非周期的 – デッドライン(締め切り) * ハード,ソフト * ファーム(firm) – ジッタ(タイミングの揺れ) * 絶対的,相対的 とか... (ちょっと脱線)時間制約って? 時間 T T T T T1 T2 T3 T4 d Δt Δt 10
  11. 11. • システム機能を実現するいくつかの「ア プリケーションプログラム」からなる. – たとえば • プログラム構成はシステム毎に異なり, 設計時に決まる.動的に変化しない. • プログラムは事前に検証され,システム に悪影響を及ぼさないことを前提とする 組込みソフトウェアの特徴(1) 入力 処理 入力 出力 計算 処理 出力 処理 プログラム モータ 制御 パルス データ PWM信号 シリアル モニタ コマンド データ 結果 出力 11
  12. 12. • 多くの場合,プログラムは並行してサー ビスを提供する.なので,適切な処理の 切り替えが必要 • システムの時間制約を満たすように動か すこと 組込みソフトウェアの特徴(2) 入力 出力 入力 出力 入力 出力 入力 出力 時間 12
  13. 13. そこで,リアルタイムOS? 13
  14. 14. • OSとは,プログラムの実行を管理するソ フトウェアのこと. – プログラムを「開始」とか「停止」とか「終 了」とか • 同時に動作する複数のプログラムの実行 を管理するために利用される. 「同時に動作する」といっても単一プロセッサでは同時に一つしか動かせ ません.ここでは「同時に動作状態にある」とでも思っていただけると まず,OS(Operating System)とは 14
  15. 15. • システムごとにハード構成が異なる. • そのため,OSはプロセッサや割込みコン トローラなど「最低限の構成」を前提に 「最小限の機能」だけが提供される. – 保護機能も必須ではない.リアルタイム性の 観点からできる限り省かれる. • システムがリアルタイム性を求められる ため,その実現に適した機能を持つ. – で,結局それは リアルタイムOS ということになる... 組込みシステムのOS 15
  16. 16. RTOSを使いたくなる状況までを 順番に追ってみる 16
  17. 17. • 例1)0.5秒周期で動作するプログラム – 例えば機器の稼働状態を示すLED点滅とか – 時間経過はポーリングでチェック ポーリングによるループ処理 task1 void main () { while(1) { if(0.5秒経過?) { task1(); } } } void task1() { /* 処理*/ } 0.5s main 17
  18. 18. • 例2)処理を追加 – シリアルからデータを随 時受信. – 受信毎に,対応するコマ ンドを実行. – 処理(console_task)が短い うちは特に問題ない ポーリングによるループ処理 task1 void main () { while(1) { if(0.5秒経過?) { task1(); } if(シリアル受信?) { console_task(); } } } console_task 18
  19. 19. • 例3)時間のかかる処理が追加された – 周期処理が遅れる(または取りこぼす)可能 性がでる ポーリングによるループ処理 task1 void main () { while(1) { if(0.5秒経過?) { task1(); } if(シリアル受信?) { console_task(); } } } void console_task () { if(メモリダンプ?) { /* ダンプ処理(長い) */ } else if(コマンド?) { /* 他のコマンド処理 */ } } console_task 19
  20. 20. • 対策案)0.5秒ごとの周期処理を優先的に 実行したいなら,それを割込み処理にす る 割込みによる解決 handler1 void main () { while(1) { if(シリアル受信?) { console_task(); } } } void console_task() { if(メモリダンプ?) { /* ダンプ処理 */ } else if(コマンド?) { /* 他のコマンド処理 */ } } console_task void handler1() { /* 処理 */ } 0.5秒タイマー 20
  21. 21. • あるプログラムが,それまで動いていたプロ グラムの間に割り込むこと – それまでの処理を一時中断して別の処理を実行 し,その後,中断したプログラムを中断した時点 から再開すること – 割込みを使用すると,動作順序に関連性のない独 立した逐次処理の流れが発生する – 割込みは優先度というパラメータを持ち,高い優 先度をもつ割込みが先に実行される 割込みとは スイッチ タイマ タイマ 割込み 処理 スイッチ 割込み 処理 割込み発生! 割り込まれるプログラム 割込み処理プログラム 処理を保留 21
  22. 22. • プロセッサの利用効率を上げる – 通常、デバイスの動作はプロセッサより遅い – 外部の変化を検出するために常に確認するの は効率が悪いため変化した時に教えてもらう 割込みを利用する目的 確認 処理2 処理1 処理2 処理1 22
  23. 23. • 割込みが発生すると,プロセッサへ非同期に電気 的な信号(割込み信号)が送られる • プロセッサは割込み信号を受け取ると、実行中の プログラムを中断し,割込み処理プログラムを開 始する • 割込み処理プログラム実行中,それよりも高い優 先度を持つ割込みが発生した場合には処理が中断 され,高い優先度をもつ割込み処理プログラムが 開始される • 割込み処理プログラムが終了するとプロセッサは 中断していたプログラムを再開する 割込み発生時の処理の流れ 割込み発生! 割込み処理プログラム 処理を保留 割込み信号 23
  24. 24. • 例4)割込み処理を追加(優先度:高) – 取りこぼすかもしれないため入力を早く受け 付けたい.でも,処理完了に時間がかかる. 追加したいものがそういうものだったとしましょう. – 処理時間が長くて,優先度の高い割込み処理 を追加すると,そのぶん他の割込みの受付が 遅くなることがある それでよいか? 割込みの追加と問題点 handler1 console_task handler2 24
  25. 25. • 困るならば,プログラムを「先に処理し たい」部分と「後で行う」部分に分けて みる – 急ぐ部分だけを割込み処理にする 処理の分割 プログラム 入力 出力 急ぐ処理 後で行う 処理 出力入力 通知 25
  26. 26. • 対策案)一部をメインループへ移動 – handler1 の割込み受付の遅れは最小限に – これで解決,しかし... 割込みによる解決 handler1 console_task handler2 task2 handler2では最低限の処理と task2への通知を実施 26
  27. 27. • 移動された(時間のかかる)処理は,最悪ルー プ1周するまで実行を待たされることがある – 結局,元の問題に戻った – メインでなく低優先度の割込み処理とかすれば良 いのでは?それも正解ですが優先度数には上限が. 割込みによる解決 void main () { while(1) { if(シリアル受信?) { console_task(); } else if(task2開始条件?) { task2(); } } } handler1 console_task handler2 task2 最低限の処理とtask2への通知 27
  28. 28. • 対策案)長い処理は一定量処理して戻す 定期的な処理の切り替え void console_task(void) { static int dump_run = false; if(メモリダンプ? || dump_run) { dump_run = dump(dump_run); } /* 以下,省略 */ } int dump(int cont) { if(cont) { /* 中断前の状態に戻す */ goto loop: // 再開 } while(データ残ってる?) { loop: /* データ出力 */ if(中断回数?) { /* 状態保存 */ return true; // 継続中 } } return false; // 終了 } handler1 console_task handler2 task2 main 28
  29. 29. • プログラムの切り替え処理をいちいち埋 め込むのはとても煩雑 – プログラム追加毎に必要 – 計算量もそのつど決定 でも void dump(void) { while(データ残ってる?) { /* データ出力 */ } return; } 本来行いたい処理 int dump(int cont) { if(cont) { /* 中断前の状態に戻す */ goto loop: // 再開 } while(データ残ってる?) { loop: /* データ出力 */ if(中断回数?) { /* 状態保存 */ return true; // 継続中 } } return false; // 終了 } 29
  30. 30. • 割込みを利用することで,急ぐ処理を優先的 に実行開始できる. • プログラムを割込み処理とメイン処理に分け ることで,割込み受付の遅延を尐なくでき る. • しかし,メインループの処理には優先度がな いため,急ぐ処理が先に実行されることが保 証できない. – デッドラインを守る上においては重要である. ここまでの課題を整理 割込み処理A 割込み処理B タスクA タスクB 割込みA 割込みB 通知 通知 30
  31. 31. • 先に実行させたいタスクに高い優先度を 設定することで,先に実行させることが できる. – 優先度の低いタスクが動いていても関係ない RTOSによる解決 void task2() { /* タスク処理 */ } void handler2() { iact_task(TASK2); // 起動 } void console_task () { /* コマンド処理 */ } handler1 console_task handler2 task2 task2 起動 31
  32. 32. • RTOSを使うと – メインプログラムの間に割込みのような優先 度を持たせ,急ぐ処理を常に先に実行でき る. – 複数のプログラムを並行に動作させた上でリ アルタイム性が検討できるようになる – プログラムの共通的な切り替え処理をOSとし て分離できる.その結果,各プログラムの独 立性が高まり,保守管理が楽になる. ということができる RTOSのメリットまとめ 32
  33. 33. • 実行開始のタイミング – 周期ハンドラ+タスク起動 – 割込み+タスク起動 • デッドライン(締め切り) – スケジューリング規則と優先 度設定で最悪処理時間を調整 • ジッタ – スケジューリング規則と優先 度設計で開始タイミングの遅 れの程度を調整 – (RTOSとは関係ないけど)処理が一定時間で終わる ようなソフト設計とか,ハード設計とか RTOSの時間制約への寄与 時間 T T T T T1 T2 T3 T4 d Δt Δt 33
  34. 34. • 全ての利用者やプログラムに平等に計算 機資源を提供するという考え方に基づく ため,リアルタイム性が保証できない – TSS(タイムシェリングシステム) – 実際には,リアルタイム性をもたせるための 拡張機能を取り込んでいる場合もある. • 必要メモリ量が多すぎる. – 最低でも1MBはRAMが必要というのでは, RAMが尐ないシステムでは使えない.たくさん積 んでるなら良いけど 汎用OSではなぜダメか 34
  35. 35. • ハードウェアは年々変化する.開発の都 合でハード変更が必要となる場合がある • ハードウェアが異なれば,割込み系な ど,そのハードの定義や挙動も異なる. • その都度システムが同じ振る舞いをする かどうかの検討が必要となる. • OSという共通の枠組みを使うことで,OS 移植とアプリ移植を独立に実施できる. ハードに起因する挙動の違いを枠組みに そって整理でき,検討しやすくなる. RTOSの別のメリット 35
  36. 36. • 様々なRTOS – μITRON (TOPPERS/JSP, NORTi など) – OSEK/VDX (ISO 17356シリーズ) – その他(QNX,VxWorks, とか) • OS によっては目的別に機能のサブセット が定義されている – (μITRON4.0)スタンダードプロファイル,自 動車制御プロファイル – (OSEK) BCC1,BCC2,ECC1,ECC2  ここでは TOPPERS/SSP カーネルを対象にしますが,そういやTOPPERS まだ紹介してないですね.... 様々なリアルタイムOS(RTOS) 36
  37. 37. TOPPERSプロジェクト 37
  38. 38. • オープンソース開発プロジェクト – TOPPERSとは Toyohashi OPen Platform for Embedded Real-time Systems の略 – 2003年よりNPO法人化 • 目的 – 組込みシステム開発で基盤となるソフトウェ アの提供による産業振興 * 非競争領域をオープンソース化し,企業・個人が 先進的な開発に取り組めるように – 教育教材の提供による技術者育成 TOPPERSプロジェクトとは 38
  39. 39. TOPPERSプロジェクトとは http://www.toppers.jp/project.html 39
  40. 40. • 組込みシステム用RTOS – TOPPERS新世代カーネル系 * ASP(標準的) * FMP(マルチコア拡張),FDMP(機能分散マルチプロ セッサ向け) * HRP2(高信頼) * SSP(小規模) – μITRON系 * JSP(スタンダード), FI4(フルセット) – 欧州車載系 * ATK1(OSEK/VDX), ATK2(AUTOSAR) 成果物(1) 40
  41. 41. • ミドルウェア – TINET(TCP/IP),CAN/LIN – FatFs for TOPPERS (ファイルシステム) – TECS(コンポーネントシステム) • 設計・評価用ツール – カーネル用テストスイート – TLV(ログ可視化) • 教育用教材 – 各種セミナー教材,ETロボコン用コンテンツ 成果物(2) 41
  42. 42. • TOPPERS開発成果物の採用事例 http://www.toppers.jp/applications.html 開発事例(再掲) デジタルピアノ CASIO PX-850BK HDDデュプリケータ 株式会社ワイ・イー・シー Demi PG520 ロケット JAXA H-IIA型 ジェルジェットプリンタ リコー IPSiO GX e3300 42
  43. 43. • オープンソースライセンスである – だれでもすぐに利用できる – 製品に取り込みやすい(レポートウェア) • ITRONで長年培われた技術をベースとし ており,実績がある – ITRON(Industrial TRON, TRONはThe Real- time Operating system Nucleusの略)はトロン 協会により定められた制御機器向けリアルタ イムOSの業界標準仕様 – 現在では ITRON を改良した TOPPERS新世 代カーネル の開発が行われている TOPPERSの特徴 43
  44. 44. • μITRON仕様の発展版 – 最新版はバージョン1.6.0 (2014/4 現在) • TOPPERS/ASPが代表例で,他に FMP, FDMP, HRP2などがある. • TOPPERS新世代カーネルは TOPPERS新 世代カーネル統合仕様書(以後,統合仕様 書) にまとめて規定されている. – TOPPERS/SSPカーネルはTOPPERS新世代 カーネルの一種である.したがってSSPカー ネルは基本的にこの仕様に基づく. TOPPERS新世代カーネル 44
  45. 45. 新世代カーネル統合仕様書 45 ※このイメージちょっと古いです
  46. 46. • TOPPERSプロジェクトが配布している小 規模組込みシステム用のRTOS • ASPカーネルと比べて大幅に機能削減 • 2011年11月より一般公開 – 最新バージョンは1.2.1 (2014/4 現在) • 対応MCU(他にも移植中) – Cortex-M3 – R8C/M32C – RX62N – Cortex-M0(+)(非公式) https://bitbucket.org/NSaitoNmiri/toppers_ssp_lpc812/ TOPPERS/SSPカーネルとは TOPPERS/ASP TOPPERS/SSP ROM RAM 約26KByte 約3KByte 52Byte 31Byte 46
  47. 47. ロードマップとSSPの位置づけ 47
  48. 48. • 出典:T-Engineフォーラム「2011年度組込 みシステムにおけるリアルタイムOSの利 用動向に関するアンケート調査報告書」 http://www.t-engine.org/ja/2012/tef-rtos2012.html SSPの開発背景 48
  49. 49. • RTOSサイズに関する利用動向 – この数年,小規模システムの割合はあまり変 化がない – 64KB未満のプログラムサイズが約19%を占 め,前年比でも減尐していない. * RAMはたいていの場合,それよりさらに尐ない – 今後も一定の割合で存在すると仮定 * メモリ増大化でこの仮定が崩れつつあるのではという気もする • 従来のTOPPERSのRTOSではRAMの極め て尐ない組込みシステムには適用が困難 – JSP や ASP が求めるリソースが小規模シス テムには大きい. SSPの開発背景 49
  50. 50. ※ 基本,拡張,独自追加の各機能に大別 • 基本機能 – μITRON4.0仕様「仕様準拠の最低条件」を元 に,TOPPERS新世代カーネルの機能をサブ セット化 * 最低限のタスク管理(タスクには待ち状態がない) * 割込み管理,CPU例外管理,システム状態管理 SSPカーネル仕様の特徴(1) μITRON4.0仕様 TOPPERS 新世代カーネル仕様 TOPPERSが 独自に拡張 (共通部分) 基本機能 独自拡張部分 (SSPのみ) SSPカーネ ル拡張機能 仕様準拠の 最低条件 50
  51. 51. • RTOSがμITRON4.0に準拠しているという ために最低限必要な機能および仕様を定 めたもの 1.静的APIおよびサービスコールのサポート * CRE_TSK タスクの生成 * (i)act_tsk タスクの起動 * ext_tsk 自タスクの終了 * DEF_INH 割込みハンドラの登録 2.μITRON4.0仕様のスケジューリング規則に 沿ったスケジューリングを行うこと * 優先度ベースおよびFCFS(First Come First Service)のスケジューリング 参考:仕様準拠の最低限の条件 51
  52. 52. • 拡張機能 (不要なら外すことが可能) – 時間管理機能({周期,アラーム}ハンドラ) – 同期・通信機能(データキュー,イベントフ ラグ) • 独自追加機能(SSPのみに存在する機能) ※システム全体のプログラムサイズを最小化す るために有用な機能 – 共有スタック領域,実行時優先度 • TOPPERSの他のカーネル(ASPカーネル など)が上位互換性を持つように配慮し ているが,完全な互換にはなっていない SSPカーネル仕様の特徴(2) 52
  53. 53. • 対象とするプログラム規模 – 実行プログラムサイズが数KB~数十KB程度 * ASPカーネルでは数十KB~1MB程度 – 尐し小さめのシステムにも適用可能 * 例えば ROM6KByte,RAM2KByte程度でも可能 * ROM4K, RAM1Kに挑戦中だが現状ちと厳しい • プログラム機能 – 複雑な制御を必要としないシステム * タスクスケジューラ,割込み管理で十分な場合 • OS導入ステップ – リアルタイムOSを導入したいが,導入障壁が 高いと感じている開発チーム SSPカーネルの適用範囲 53
  54. 54. • 組込みシステムはコンピュータシステム であり目的に専用化されたRTSである • 組込みソフトウェア開発ではリアルタイ ム性を確保する点でRTOSが便利である • RTOSは標準仕様品を使う意味での利点も ある.選択肢の一つとしてTOPPERSの カーネルを利用するという方法がある. • TOPPERS/SSPカーネルはTOPPERSプロ ジェクトの組込みシステム向けRTOSの一 つであり,小規模な点が特徴である. まとめ 54

×