基礎から学ぶ
組込みμT-Kernelプログラミング
リアルタイムOSの初歩から実践テクニックまで

基礎から学ぶ組込みμT-Kernelプログラミング

坂村 健 監修

豊山 祐一 著

定価 3,080円(本体 2,800円+税)

ISBN 978-4-89362-373-7

B5変型判 並製 308 頁

2021年12月15日 発売

IoTエッジノード向け世界標準OS「μT-Kernel 3.0」を徹底解説。
リアルタイムOSの基礎からデバイスドライバの開発やOSの移植まで、理解のポイントとプログラム例を分かりやすく説明した入門書の決定版。

正誤表


書籍版

定価 3,080円
(本体 2,800円+税)

電子書店版

定価 2,772円
(本体 2,520円+税)

PDF版

定価 2,772円
(本体 2,520円+税)



  • 内容紹介
  • 監修のことば
  • 目次
  • サンプル
  • 参考情報
  • ダウンロード

 μT-Kernel(マイクロティーカーネル)は、トロンフォーラムがオープンソースで公開している組込みシステム向けのリアルタイムOSです。μT-Kernelの仕様は、IEEE(米国電気電子学会)によってIoTエッジノード向けの世界標準OS の仕様として採用され、IEEE 2050-2018として公開されています。
本書は、このμT-Kernelの開発関係者が、自分自身の経験で得たノウハウをもとに、μT-Kernelの機能やプログラミングをやさしく解説した入門向けガイドブックです。初心者には理解のポイントを分かりやすく説明した手引書として、経験者にとっては利便性の高い参考書として、IoTエッジノードや組込みシステムのプログラミングを実践的に解説しています。


■本書のねらい

 本書は、リアルタイムOS μT-Kernel 3.0と、そのプログラミングについての解説書です。
 μT-Kernel 3.0は、長年の実績とシェアを持つITRONをルーツとするTRONプロジェクトの最新のOSです。また、IoTエッジノード向けのリアルタイムOSの国際標準規格IEEE 2050-2018の仕様に完全に準拠したOSでもあります。
 IoTが世の中に広まるとともに、IoTエッジノードのプログラミングが重要となってきています。しかしながら、IoT エッジノードはリアルタイムOS を使用した組込みシステムであり、一般のパソコンとは異なる点が多いため、IoTエッジノードのプログラミングの修得は難しいとされてきました。また、リアルタイムOSを動かしてみようと思っても、個人でその開発環境や実行環境を用意することが難しいといった問題もありました。
 こういった以前の状況に対して、近年では安価で高性能なマイコンボードが市販されるようになり、開発環境もオープンソースなど無償で利用できるものが充実してきました。その結果、リアルタイムOSのプログラミングを行うハードルは大きく下がってきています。
 本書では、市販のマイコンボードやオープンソースの開発環境を使用して、μT-Kernel 3.0 のプログラミングを行い、OSの動作を実際に確認しながらμT-Kernel 3.0の説明をしていきます。
 リアルタイムOSの各機能について、マイコンボード上で実行するためのソースコードも掲載しました。さらに本書の後半では、μT-Kernel 3.0のポーティングやデバイスドライバの開発方法など、より実践的な内容についても解説しています。

■本書の読み方

 本書は、リアルタイムOSを初めて使う初心者の方から、すでに開発現場で活躍されているエンジニアの方まで、幅広い読者を対象としています。
 リアルタイムOSや組込みシステムの経験がない方は、第1部から順番に読み進めて、基本的な知識を身につけてください。第2部では、説明の流れに従って、実際に開発環境の構築やプログラミングを行いながら学習することをお勧めします。
 すでにリアルタイムOSの開発経験のある方は、必ずしも最初から本書を読む必要はありません。必要に応じて個別の話題を参照していただくのが効率的です。たとえば、ITRON や他のリアルタイムOSに関する知識はあるものの、μT-Kernelについては未経験という方であれば、第1部の3章から読んでいただくとよいでしょう。

■監修のことば

 現実の物理的な世界にある、コンピュータが組み込まれたいろいろなモノたち(things)──温湿度計などのセンサーから、照明・空調機などの家電、さらにはエレベーターなどの建築設備まで─が、相互に通信を行って情報を共有しながら協調動作を行い人間にとって快適で持続性の高い環境を作る、というのがIoTのコンセプトである。

 そのため、ネットワークに接続されるこれらのセンサーや機器は、ネットワークの末端に位置して物理環境と対峙するという意味で、「IoTエッジノード」とよばれる。協調動作の実現方法としては、IoTエッジノードが直接他のエッジノードに働きかけるという形態も考えられるし、クラウドサーバが複数のエッジノードからのデータをもとに判断し、個々のエッジノードに動作を指示するという形態もある。

 こういったIoTシステムのプログラム開発を考えた場合、エッジノード側とクラウドサーバ側では、プログラムに求められる機能や性質、プログラミングの難易度などに大きな違いがある。クラウドサーバ側では、各種の情報処理やデータベースへの情報蓄積、Webアプリの画面を使った人間とのインタフェースなどを行うが、プログラムの実行にはデータセンターの高性能なサーバなど潤沢な計算資源を使うことができる。その結果、利用可能なプログラミング言語、フレームワーク、ライブラリなどについて豊富な選択肢があり、開発やデバッグのための環境も充実している。また、需要が幅広くプログラミングに携わる開発者も多いので、Web上の情報が豊富であり、関連する書籍も多く出版されている。そのため、特に初心者にとっては、クラウドサーバ側のプログラム開発の方が親しみやすく、成果が出るのも早い。クラウドサーバ側のプログラム開発は、一般には開発のハードルが低いといえよう。

 一方、センサーや機器の制御を行うIoTエッジノード側のプログラムは、ハードウェアコスト削減のため必要最小限の処理能力でメモリも少ない組込み用マイクロコンピュータ上で動作する必要がある。そのため、利用可能なプログラミング言語やOS、ミドルウェアなども限られる。にもかかわらず、機器の制御のために応答性の保証や動作のリアルタイム性が求められ、プログラム開発の難易度が高い。さらに、機器の制御という地味な分野であるため、プログラミングに携わる開発者が少なく、関連書籍やWeb上での情報も少ない。すなわち、クラウドサーバ側のプログラム開発とは逆に、IoTエッジノード側のプログラム開発はハードルが高い。

 しかしながら、IoTは多数のエッジノードがあってこそ成り立つシステムであり、IoTエッジノードの重要性は論を俟たない。IoTエッジノード側は、クラウドサーバ側と比べて機能はシンプルな場合が多いものの、その数は圧倒的である。IoTの応用が高度化するにつれて、IoTエッジノードの数は増加の一途をたどっており、2025年には全世界で416億台になるという予測がある(*1)。さらに、小さなセンサーなども含めて数えると、トリリオンセンサーという語があるとおり、1兆台クラスのIoTエッジノードが稼働する時代もすぐ近くまで迫っている。そのためにIoTエッジノードの制御用プログラムの開発効率を上げるとともに、その開発人口を増やすことは、喫緊の課題である。
(*1) https://atmarkit.itmedia.co.jp/ait/articles/1906/20/news056.html

 私が1984年から始めたTRONプロジェクトでは、今でいうIoTエッジノードの重要性に早くから着目し、機器制御用リアルタイムOSである「ITRON」の仕様の標準化を行って開発効率の向上を図った。また、機器間の通信による協調動作についても早くから研究を行い、その可能性を探ってきた。当時はまだIoTはもちろん、インターネットという語もなかったが、機器間の協調動作という概念は現在のIoTそのものであった。

 「ITRON」とその後継のOSである「T-Kernel」「μT-Kernel」は、2010年代には組込み機器の制御用OSの60%以上のシェアを持つようになり、各種の電子機器や家電製品から自動車、さらには人工衛星「はやぶさ」「はやぶさ2」にも搭載された。また、これらのOSの利用は国内に限らず、海外からも盛んにダウンロードされ利用されているし、英語や中国語に翻訳された「ITRON」や「T-Kernel」の仕様書は海外でも出版されている。こういった実績とIoTに対する先駆性から、2018年にはIEEE(米国電気電子学会)の標準仕様であるIEEE 2050-2018として「μT-Kernel」が採用され、文字どおりIoTエッジノード用OSの世界標準となっている。

 本書は、その世界標準仕様に準拠した最新のリアルタイムOSである「μT-Kernel 3.0」について、OSの機能やプログラミングをやさしく解説した入門向けガイドブックである。リアルタイムOSの基礎から、I/Oデバイスの操作方法、デバイスドライバの使い方や作り方、OSのカスタマイズやポーティングといった実践的なテクニックまで含めて、これ一冊でリアルタイムOSに関連する幅広い知識や、IoTエッジノードの制御用プログラムの開発ノウハウを得ることができる。

 本書の著者は、実際にμT-Kernel 3.0のOSやデバイスドライバの開発に携わった経験や、セミナーでリアルタイムOSのプログラミング手法を教えていた経験から、重点的に学ぶべきポイントや間違いやすい部分などを熟知している。本書には、そういった開発経験やリアルタイムOSを教える際のノウハウが集約されており、初心者にとっては痒いところに手が届くように分かりやすく、ある程度の経験者にとっても利便性の高い参考書として、IoTエッジノードや組込みシステムのプログラミングに実践的に役立つ構成になっている。

 μT-Kernel 3.0はオープンソースのリアルタイムOSであり、GitHubから誰でも自由にダウンロードして動かすことができる。また、本書で説明している例題のプログラムなども、出版社のサイトからダウンロードして実行することができる。OSに限らず、プログラミングを学ぶには、自分でプログラムを実行してデバッグしてみることが何よりも大切である。ぜひ本書を参考に、μT-Kernel 3.0を自分自身で動かしながら、IoTエッジノードのプログラミングのノウハウを身につけていくことをお勧めしたい。

 本書によりIoTエッジノードの開発を志す技術者が増え、それがIoTの応用拡大や発展につながり、結果として人間生活の快適性、持続性の向上に資することになれば、これに勝る喜びはない。ぜひ、多くの技術者に本書を活用していただければ幸いである。

2021年11月
トロンフォーラム会長/東京大学名誉教授
坂村 健

  • 監修のことば
  • はじめに
  • 目次
第1部 基礎編 IoTエッジノードとμT-Kernel
1.1 IoTエッジノードとリアルタイムOS
  • 1.1.1 IoTエッジノードとは
  • 1.1.2 IoTエッジノードと組込みシステム
  • 1.1.3 リアルタイムOSとは
1.2 TRONプロジェクトとμT-Kernel
  • 1.2.1 TRON のリアルタイムOS
  • 1.2.2 IoT-EngineとμT-Kernel
  • 1.1.3 リアルタイムOSとは
1.3 μT-Kernel 3.0の基本
  • 1.3.1 μT-Kernel 3.0 のソフトウェア
  • 1.3.2 タスク
  • 1.3.3 タスクの基本的な同期
  • 1.3.4 イベントフラグ
  • 1.3.5 セマフォ
  • 1.3.6 ミューテックス
  • 1.3.7 メッセージバッファ
  • 1.3.8 メモリプール管理機能
  • 1.3.9 メールボックス
  • 1.3.10 時間管理機能
  • 1.3.11 アラームハンドラ
  • 1.3.12 周期ハンドラ
  • 1.3.13 割込みハンドラ
第2部 実践編 マイコンボードで組込みプログラミング
2.1 マイコンボードで実行するμT-Kernel 3.0
  • 2.1.1 マイコンボードと開発環境
  • 2.1.2 μT-Kernel 3.0 の入手と開発環境の準備
  • 2.1.3 マイコンボードのデバイス制御(LEDとスイッチ)
2.2 動かして覚えるリアルタイムOS
  • 2.2.1 μT-Kernel 3.0 のプログラミング
  • 2.2.2 タスクの生成と実行
  • 2.2.3 マルチタスク
  • 2.2.4 タスク間の同期
  • 2.2.5 イベントフラグによる同期
  • 2.2.6 メッセージバッファによる通信
  • 2.2.7 メールボックス、メモリプール、時刻管理
  • 2.2.8 セマフォによる排他制御
  • 2.2.9 ミューテックスによる排他制御
  • 2.2.10 周期ハンドラの実行
  • 2.2.11 アラームハンドラの実行
2.3 μT-Kernel 3.0からI/Oデバイスを制御
  • 2.3.1 I/O デバイスとデバイスドライバ
  • 2.3.2 A/Dコンバータによるセンサー入力
  • 2.3.3 UART によるシリアル通信
  • 2.3.4 I2C通信による外部I/Oデバイスの制御
  • 2.3.5 割込みによる外部入力信号の検出
第3部 応用編 IoTエッジノードへの応用と展開
3.1 μT-Kernel 3.0のカスタマイズ
  • 3.1.1 カスタマイズの基本
  • 3.1.2 システムコンフィグレーション
  • 3.1.3 サービスプロファイル
3.2 μT-Kernel 3.0のソースコード
  • 3.2.1 μT-Kernel 3.0 のソースコード構成
  • 3.2.2 ソースコードのハードウェア依存部
  • 3.2.3 ハードウェア依存部の実例
3.3 μT-Kernel 3.0のポーティング
  • 3.3.1 ポーティングの基本
  • 3.3.2 起動処理
  • 3.3.3 割込み関連処理
  • 3.3.4 タイマ関連処理
  • 3.3.5 ディスパッチ処理
3.4 デバイスドライバの作成
  • 3.4.1 デバイスドライバの仕様
  • 3.4.2 サンプル・デバイスドライバ
付録
Appendix-1 GitとGitHubによるμT-Kernel 3.0の開発
  • A1.1 GitとGitHub
  • A1.2 GitHubとμT-Kernel 3.0
  • A1.3 Eclipse(STM32CubeIDE)によるGitHub 操作
Appendix-2 μT-Kernel 3.0のプログラムのデバッグ
  • A2.1 μT-Kernel 3.0のデバッグ機能
  • A2.2 Eclipse(STM32CubeIDE)によるデバッグ
  • 参考資料
  • μT-Kernel 関連商品紹介
  • 索引

■サンプル(クリックすると拡大します)

■参考情報

本書で利用しているマイコンボード「STM32L476 Nucleo-64(STマイクロエレクトロニクス社製)」は、以下のサイトから購入可能です。


トロンフォーラムのウェブサイト上で、本書をベースとして、リアルタイムOSの基本とリアルタイムOSを使用したプログラミングについて説明した記事を掲載しています。



■関連図書紹介


■関連製品

パーソナルメディアの組込み(T-Kernel)関連製品については、こちらをご覧ください。



本書掲載のプログラムコードがダウンロードできます。

以下の zip アーカイブ 373_tk.zip をダウンロードし、本書の奥付ページに記されたパスワードを使って展開してください。展開後にブラウザで Readme.html をご覧ください。

なお、下記「ご利用条件 および ご利用上のご注意」をあらかじめご確認ください。



■ご利用条件 および ご利用上のご注意

  • ご使用上のご質問、本書で紹介している開発環境および収録プログラムに関するお問い合わせについては、各開発環境の開発元、著者およびパーソナルメディア株式会社ではお答えできませんのでご了承ください。

  • プログラムコードの実行については、個人の責任にて行ってください。

  • 本書掲載のハードウェアおよびソフトウェアの製作および実行は、本書使用者の責任において行うものとし、製作および実行により発生したいかなる直接的・間接的被害についても、パーソナルメディア株式会社および著作者、製品販売元はその責任を負いません。

  • 収掲載されている商品名や会社名は、各社の登録商標または商標です。また、収録する各プログラムやデータの著作権は各著作者が保有します。

トップ > T-Engine > 基礎から学ぶ組込みμT-Kernelプログラミング