C言語によるリアルタイム組み込みソフトウェア開発の理論と実践 -ロボット制御演習による実践力強化-
コース番号:223P
日数:5日間
形態:ハンズオン

この研修では次のスキルが習得できます

  • 状態遷移図およびステート・チャートによるリアクティブシステムの仕様の記述法
  • 状態遷移テーブルを用いたC言語による状態遷移図の実装法
  • 組み込み機器実装に必要な高度なC言語の機能・実装の詳細
  • リアルタイム組み込み機器開発に必須な知識である並行プログラムと同期の基礎
  • BrickOSのソースコードの主要な部分を解読することによる、OSの内部の構造および動作の詳細の理解
  • 組み込みシステムの主な駆動法であるControl-Loop型、Event-Triggered型,そして周期タスク型の3つのシステム構成およびそれらの長所・短所の詳細比較
  • リアルタイムのスケジューリング理論およびその実装への応用
  • 以上学習した知識・技術を全て使い、Lego MindStorms®のロボット上に制御・駆動プログラムを実装し実践力を鍛える。

開催日程
  • ※お問い合わせください
時間 9:30 - 18:00
料金(税抜)
  • (早割) 255,750円
  • (通常) 275,000円
※価格表示は税抜です
会場 弊社 神保町 セミナールーム »

研修コースの概要

IoTの普及にともない、ますます組み込みソフトウェア開発の重要性が高まっています。しかし、そのようなソフトウェアの開発には非常に広範囲な分野にわたる深い知識と技術が必要で、優れた開発者を育てるのは大変難しいことが知られています。このコースは、C言語でリアルタイムの組み込みソフトウェアを設計・実装するのに必要な知識・技術について、理論から実践まで一貫して学ぶことを目的としたコースです。

コースを通した演習でLego社MindStorms®で作ったTippySrというロボットの制御・駆動系のプログラムを実装します。講義で新たな知識・技術を学ぶごとにそれを利用した演習として、TippySrの一部ずつを段階的に実装していきます。そのようにして最後にコースで学習した知識・技術を全て駆使したロボットのプログラムを完成させます。

一般にリアクティブ・システム(外部からの入力に対してなんらかのアクションを起こすシステム)の制御系の仕様記述には状態遷移図が使われます。ここでは状態遷移図による記述法を学び、それを状態遷移テーブルにより機械的にC言語で実装する方法を学習します。さらに状態遷移図のUML(Unified Modeling Language)における拡張版であるステート・チャートにてモデル化する技法を理解します。

次に制御プログラムの実行時の動作を完全に把握するためにコンパイラーおよびOSに対する理解を深めます。ここではまずCのプログラムがどのようにメモリー上に展開され実行されるのか、あるいはポインタ演算の詳細といった言語の重要な機能および実装メカニズムの理解を深めます。

次に複数スレッドの実行環境およびそれらの間のインタラクションといった並行プログラムの基礎や同期の問題を学習し、さらにOSが「どのような」並行プログラム環境を「どのようにして」提供しているのかをより深く理解するため、MindStorms®用のC言語OSであるBrickOSのソースコードの主要部分を読解します。

続いて組み込みシステムの標準的な駆動法であるContorl-Loop型、Event-Triggered型、周期タスク型の3つのタイプの構成を学びそれらの長所・短所を理解します。さらにハードリアルタイムシステム設計に必要なリアルタイム・スケジューリング理論を学習し、高信頼性ハード・リアルタイム・システムの標準スケジューリングアルゴリズムであるRate Monotonicを周期タスク方式によりOS上に複数スレッドを使い実装する方法を学びます。

この研修の対象者

最新のリアルタイム組み込みソフトウェア開発の理論から実践まで一貫して体系的に学ぼうと考えていらっしゃる組み込み機器の設計者、プログラマ、ソフトウェア・エンジニアの方々に最適です。受講には6ヶ月以上のC言語によるプログラムの経験が必要です。

コース内容

状態遷移図とその実装

  • 状態遷移図とステート・チャート(サブ・クラス、entry/exit/activityアクション)
  • 状態遷移テーブルを使ったC言語による状態遷移図の実装

組み込み機器実装のためのC言語の上級技能

  • コンピュータの基礎(アキュムレータ・マシンとレジスター・マシンの基本構成)
  • 汎用アーキテクチャー(例:Pentium)の概要
  • H-8マイコン(Lego MindStorms®に使われているCPU)の概要
  • Cの構文とコンパイラが生成するPentiumおよびH-8アセンブリ言語の理解
  • 実行時のメモリー展開 ― Text, Data, Bss, Heap, およびFrame Stack の詳細
  • Cポインタ演算の詳細 ― 多次元配列とポインター演算、ヒープ上のメモリーへのポインターによる配列型アクセス法、structへのポインタ、ファンクションへのポインタ

並行プログラムと同期

  • マルチタスキングとマルチスレディング
  • スレッド間の排他制御とコンディション同期
  • セマフォーの定義及びセマフォーによる同期コードの実装
  • デッドロック

BrickOSソースコードの読解と解析

  • BrickOS の構成およびAPI
  • スレッドの管理とプリエンプティブ・プライオリティ・スケジューリングの実装
  • 同期プリミティブの実装

リアルタイム・システム構成とスケジューリング理論

  • 組み込みシステムの構成(Control-Loop型、Event-Triggered型、周期タスク型)の詳細とそれらの長所・短所の比較
  • オプティマル・スケジューリングとRate-Monotonic(RM)アルゴリズム(Liu-Laylandの定理とその証明)
  • プライオリティ・インバージョン(逆転)問題とプライオリティ継承およびプライオリティ上限プロトコル
  • 排他制御の実際

Legoロボット(TippySr)のBrickOS上での実装演習

  • 行動制御理論とTippySrの仕様解説
  • Cygwin上でのBrickOSの開発環境
  • モーター、センサー駆動のためのサポート・ファンクションの実装
  • 状態遷移図およびステート・チャートによるTippySrの制御系の仕様の記述
  • 状態遷移テーブルを使ったC言語によるTippySrの制御系の実装
  • Rate Monotonicスケジューリングに基づいた周期タスク方式によるTippySrの駆動系の実装
  • リアルタイム要求に基づいたセンサーのサンプリング周波数の決定
  • 排他制御の必要箇所の識別とその実装

担当講師のコメント

このコースは信頼性の高いリアルタイムの組み込み機器を設計・実装をするために必要な知識を正確に身につけていただくことを目的にしています。一般の書籍ではなかなか見つけるのが難しいような内容やコンピュータサイエンスの大学院で学習するような高度な内容を含みますが、テキストではそれらをできる限り分かり易く説明しました。正確な知識があれば仕事を通して経験をつむことによりそれらの知識を完全に自分の技術として使いこなすことができるようになります。一方、正確な知識がなければ仕事を通しての技術の習得の効果はあまり期待できません。あるいは内容によっては技術の習得は全く望めません。

私は組み込み機器開発に携わる技術者の方々にこのコースを通して必要な知識を正しく身につけていただき、それらをすぐに開発に役立てるとともにその後の仕事を通しての技術の習得をより効果的なものとしていただきたいと考えています。

受講者の声

「5日間の研修内容すべてに無駄が無く、ほぼ全てが繋がってリアルタイムシステムの理解に繋がり、また、より実践に基づいた即日使える内容ばかりだった。リアルタイムシステム設計者必須の研修と思う(全員受けさせるべき)。」

「大変有意義な講座でした。組込システムのソフトウェアについて包括的に網羅されており、しかも“広く浅く”ではなく“広く深く”知識を習得出来たと思います。」

「知識の紹介だけでなく、実践による裏付けも伴っており、とても良い内容だったと思います。プログラム歴は約10年。先生のおっしゃる通り、しっかりした教育を受けずにOJT中心の技術習得だったので理論的な知識が欠けている事を痛感し、もっと早く受けていたらと思いました。」

「独学では何年、何十年経っても得られない内容を本コースで学べたと思います。想像していた以上に内容が濃かったので、講師の他のコースも受講したいと思います。」

「素晴らしい内容だった。プログラマとして仕事をしていくうえで必要な知識を学べ、今後の勉強の必要性を意識させる構成は、初日からずっと驚きだった」

「インストラクターの知識の深さ、広さ、説明、質疑応答、いずれもレベルが高く、脱帽する。」

「組み込みシステムの技術者として知っているべき基礎が学べた。とても高度な内容だったが、すぐに業務に活かせるような知識であり、復習して自分の技術にしたいと思う。」

「深い知識と豊富な経験から構成された講義は、これまでの自分のソフトウェアに対する価値観を変えてくれる内容であった。さらに、ソースレベルで考えることの重要さと正確さを学べた。」

「コンパイラからOSまで、組み込みソフトウェアの動作について、完全に理解するための知識を得られた。」