リアルタイム組み込みソフトウェア開発の理論と実践(1)
-Cコンパイラ生成アセンブリコードの理解とOSソースコードの読解-
コース番号:348L
日数:3日間
形態:ハンズオン

この研修の対象者

最新のリアルタイム組み込みソフトウェア開発の理論から実践まで一貫して体系的に学ぼうと考えている組み込み機器の設計者、プログラマ、ソフトウェア・エンジニアの方々に最適です。全ての例をCのプログラムで示すため、受講にはC言語のプログラムの充分な読解力が必要です。具体的には1~2年以上のC言語によるプログラミングの経験が望まれます。

開催日程
  • 2019/12/11(水)-13(金)開催確定
    (早割適用締切:11/11)
時間 9:30 - 18:00
料金(税抜)
  • (早割) 165,540円
  • (通常) 178,000円
※価格表示は税抜です
会場 弊社 神保町 セミナールーム »

研修コースの概要

IoTの普及にともない、ますます組み込みソフトウェア開発の重要性が高まっています。しかし、そのようなソフトウェアの開発には非常に広範囲な分野にわたる深い知識と技術が必要で、優れた開発者を育てるのは大変難しいことが知られています。このコースは、C言語でリアルタイムの組み込みソフトウェアを設計・実装するのに必要な知識・技術について、理論から実装まで一貫して学ぶことを目的としています。さらにコースを通した演習で、講義で学習した理論・知識・技術を全て駆使し、Lego社Mindstorms EV3®で構築したロボットの制御・駆動系のプログラムを実装します。

本コースは各3日間から成る2つの連続したコースで構成されています。第一部 (コース(1)) は「基礎編」として、組み込みプログラムがOS・プロセッサ上で動作する一貫した流れの中で構築上・実装上でのブラックボックス(不明な部分)を無くすことを目的にしています。第二部 (コース(2))は「応用編」として、ロボットのプログラムを完成させ、コースで学習した理論・知識が実装・実践へと繋がることを確認します。 一般的に組み込み機器のプログラム開発においては、「コンパイラ」及び「OS」がブラックボックスとなっており、それらの部分で問題が起こると対処できない状況に陥る場合が多いと思います。コース(1)ではその2つの部分に焦点を当て、コンパイラの生成するアセンブリコード及びOSの実装レベルでの理解を深めます。その学習の必要性、目的、そしてコースのゴールは以下のようにまとめることができます。

  1. C言語が、OS、デバイスドライバ―、IoT等のハードウェアとのインターフェース部のプログラミングに今後とも長く使い続けられる理由はC言語の「高級アセンブリ言語」としての役割にあります。従ってC言語のプログラマとしてはC言語を「高級アセンブリ言語」として使いこなせるレベルの知識が必須です。それは ①Cコンパイラの生成アセンブリコードを解読・理解でき、そして ②必要な部分はアセンブリ言語で記述でき、それらを自在にC言語とリンクできる知識・技術を身に付けることです。
  2. 今後は一般的なアプリケーション、組み込み機器を問わず並行プログラムが標準となります。並行プログラムの開発にはOSの役割及びその動作の深い理解、特に実装のソースコードレベルでの理解は大変役に立ちます。またOSのソースコードはハードウェアとのインターフェース部のプログラミングやCとアセンブリのコードのリンク法等のプログラム例としても最適で、その読解による学習効果は大変大きいです。
  3. IoTのようにネットワークにつながるシステムの場合、セキュリティは大変重要になりますが、コンピュータウィルス等は(ソースコードではなく)実行プログラムの改ざんを行うので、高信頼性・安全性システムの開発には上記のアセンブラレベルでのプログラムの動作の理解、及びソースコードレベルでのOSの実装の理解が必須です。

講義では、1つ1つの学習項目の理解のために必要なことを全てボトムアップで説明していきます。また説明にあたり、多くの例を用意していますが、全ての例は「実際に動作するきれいなCのコード」により示します。従って組み込み機器開発についてのバックグラウンドが無くても、Cのコードの読解力があれば内容をしっかり理解できます。

このコースは2部構成であり、(1)、(2)と順に受講することで、講師の長年にわたる組み込み機器開発の経験に基づく組み込みソフト開発に必要な知識を全て学ぶことができます。従って、この一連のコースで得た知識を基にOJTで経験を積んでいけば、組み込み・IoTの技術者として充分な実力が付くことを確信します。

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

  • コンピュータの基本構成と動作の概要(レジスターマシン/アキュムレータマシン)
  • コンパイラ生成のアセンブリコードの理解とアセンブリとCのコードのリンク法
    • コンパイラの生成コードの原理(C言語の各変数クラスとメモリへの割り付け法、スタック・フレームの構成等)
    • アキュムレータマシンの例としてx86(32-bit Pentium)のレジスタ構成・アドレス法を学び、VC++_x86 の生成アセンブリコードを理解
    • レジスターマシンの例としてH-8のレジスタ構成・アドレス法を学び、gccの生成アセンブリコードを理解
  • リアルタイム組み込み機器開発に必須な知識であるプロセス/スレッドの概念、並行プログラム、同期の基礎を学習
    • brickOSのソースコードの主要な部分を解読し、OSの内部の構造及び動作の詳細を実装レベルで理解
    • brickOS:初代Lego RCX用のオープンソースのH-8用のOSでリアルタイム制御に必要な機能をほぼ全て(完全ではないが)実装してあり、大変きれいに書かれていて、しかも主要部分を一日で読解できる大きさのためOSの実装レベルの学習に最適
    • TCB(スレッド・コントロール・ブロック)、スレッドの状態セーブ/ディスパッチ、レディーキューの管理、スケジューラ、同期プリミティブの実装をコードレベルで理解。またCとアセンブリのコードが協調し合う部分を実例で理解
  • brickOSを他のプロセッサに移植するために講師が改訂したプログラムを読解することにより以下を学ぶ
    • プラットフォーム依存/非依存コードの分離、アセンブリコードを最小限化(C言語でできることは全てC言語で記述する)、コードのさらなる簡潔化
    • 一例として、改訂brickOSのx86・gccによるCygwin32のプロセス上への移植を学習
  • 後半のコース(2)でx_64(64-bit Pentium)やARMプロセッサのアーキテクチャ及び改訂brickOSのそれらのプロセッサへの移植を学習するが、それぞれのハードウェアに直接brickOSを実装するのは開発環境の点で難しいので、それぞれのプロセッサ上で実装されているLinuxのプロセスへの移植を行う

コース内容

コンピュータの基本構成

  • レジスターマシン/アキュムレータマシン

コンパイラ生成のアセンブリコードの理解

  • VC++_x86(32-bit Pentium)
  • H-8 gcc

OSの基礎

  • プロセスとスレッド、同期(セマフォとその応用)

H-8のレジスタ構成 gccによる生成アセンブリコード 割り込みメカニズムの理解 brickOS(初代Lego RCXのために開発されたオープンソースのH-8用のOS)のソースコードの解読

  • OSの実装をソースコードのレベルで理解する
  • x86 gcc生成のアセンブリコードの理解とbrickOSのCygwin32のプロセスへの移植