TOPPERS 活用アイデア・アプリケーション開発
コンテスト

部門

：活用アイデア部門
アプリケーション開発部門
がじぇるね IoT 部門

作品のタイトル

： Raspberry pi による RTOS セミナーの教材の開発

作成者

：

共同作業者

：

対象者

： RTOS を自分で作りたい初級者から上級者まで

アライブビジョンソフトウェア株式会社 代表 高橋和浩

RaspberryPi 用の RTOS を作りたい初級者から上級者まで使用する開発成果物： TOPPERS/SSP および TOPPERS/ASP の ARM 依存部

目的・狙い
Rasberri pi は利用者および今後利用したいと思うユーザの多いと考え
Raspberry pi を使った RTOS セミナー(の資料および RTOS）を今回開発した。
2014 年にアイデアコンテストでの応募作品の自作 OS セミナーの Raspberry Pi 版になります。
また初級者をターゲットとした最もわかり易いカーネルを学ぶものとしています。
そのために、講義内容ではアセンブリ言語の説明を不要とするため、カーネルは C 言語だけで作られています。(ごく一部のインラインアセンブラを除く）
TOPPERS/SSP に元は無い機能である優先順位プリエンプション機能を無いものからC 言語で追加する演習をすることでより深く学ぶことができます。
また、受講者向けの開発キット DVD をセミナー用に作成、これは、Raspberry pi 用の Windows の日本語統合環境でソースレベルデバッグができるクロス開発環境を容易にセットアップできるものです。特に gdb デバッグ環境は、バイナリで動作するものが公開されておらず、linux を利用するなど必要で初級者にはハードルが高いものとなっています。これらのバイナリを含めたものを一般公開し、容易に RaspberryPi 上での RTOS を含めた開発ができる環境を用意した DVD も併せて公開します。
1

アイデア/アプリケーションの概要
以下 3 つで構成されます。
1.教材用 RTOS(TOPPERS/SSP の改造版)
https://github.com/alvstakahashi/RPI-SHRINK-SSP-FULL/tree/forRPI3-JTAG
2.教材テキストおよび演習用プログラム
RTOS は何か?から ITRON カーネルの基本構成説明
TOPPERS/SSP のソースコード解説、カーネルの拡張、改造の演習
3.受講者向けの開発キット DVD
Raspberry Pi のクロスコンパイラ、JTAG デバッガ用 OpenOcd のバイナリおよびEclipse 統合環境の設定用ファイルと手順書。
JTAG の結線図などまとめてあり、これ一つで RaspberryPi のクロス開発環境が構築できるものとしています。

2

詳細
経緯について(島根県産業センターからの依頼)
http://www.joho-shimane.or.jp/news/wanted_seminar/645(2017 年 12 月 11 日 12 日の 2 日間)
島根県産業センターからの依頼があり、自作 RTOS セミナを raspberry pi でという要望があり、現在準備中ですが、これを今回のアイデア部門として応募させていただきました。
自作 OS のセミナについては、あまり業務に直結した内容ではなく、知識として知っておくといいという内容と考えます。業務の直接使うマイコンではなく、Raspberry Pi といった入手性が高く、個人でも多くの方が所有しながら活用方法をどうしようとしているものがちょうどいいと考えました。
また Raspberry Pi の教育目的という点でも非常にマッチした利用法でもあり、より一般的に広めていくことを目的に今回アイデアコンテストに応募しました。
特に Raspberry p 用受講者向け開発キット DVD は、セミナー開催場所が遠隔地なので受講日のおよそ一カ月前にあらかじめ受講者に DVD を送付することを目的に作成を考えたものです。これは、利用用途が広く Raspberry pi の自作 OS セミナ以外にも転用可能なのでこれも公開したいと考えています。
開発物の内容１．教材用 RTOS(TOPPERS/SSP の改造版)
教材用 RTOS としておりますが、十分なテスト後実用も可能と考えています。
TOPPERS/SSP カーネルをベースに以下を改造を行っています。
1) Raspberry pi 用依存部分の対応
2) ディスパッチャ部のみのカーネル
タイマー割り込みのみ対応したベアメタルな OS 無し環境に移植できるソースコードのみとしました。割り込みハンドラとディスパッチャとタスク起動の API のみで構成されます。
3) C 言語記述化
もともとの目的は移植性を高めるものでしたが、カーネル講習にも機種依存でないこと、アセンブリ言語を知らなくても理解できる点などメリットがあります。
実装は、割り込みベクターのテーブルの C 言語記述、割り込みハンドラに関しては GCCの拡張機能 attribute を利用しています。
また、本カーネルの特徴として、割り込みからのタスクプリエンプションでの再ディスパッチ、つまり、RUN 中のタスクがら割り込みが発生、別のタスクに切り替わってからまた元のタスクがディスパッチする場合に、attribute で記述した割り込みハンドラからタスクにリターンするロジックとなります。アセンブリ言語で書かれたディスパッ
チャーでは実装の多くは割り込みハンドラとは別に、ディスパッチャー部を記述してい3

ますが、コード量が少なく学びやすくなっていると考えます。
4) 優先度プリエンプション機能
TOPPERS/SSP の特徴でもある優先度プリエンプションが無いものを、逆にあるものに改造します。元のプリエンプションしないものから有るものに改造する演習をして理解を深めます。
C 言語記述のプリエンプションしているものは、少なくとも自分は RTOS では知りません。理由は、コンテキストのスイッチが C 言語で記述できないからだと考えます。
本 RTOS の仕組みとして、Setjmp/LongJUMP の組み込み関数を使います。Callee セーブな環境でのコンテキストセーブとロードが可能です。ただし、以下のことができないのでケアする必要があります。
① CPU モードの切り替え② 割り込みレベルの変更③ 切り替え先のスタックポインタの変更④ 割り込み時の callee セーブレジスタの保護
以上 4 点をインラインブラのマクロ化しています。このマクロを CPU にあったものに置き換えれば移植できると考えています。実際に RX マイコンとその部分の切り替えで可能となっています。
2.教材テキストおよび演習用プログラム
以下の項目でセミナーを進める内容となります
１. ＲＴＯＳ概要（１）リアルタイムＯＳのカスタマイズの必要性の説明
２. ＩＴＲＯＮの作成方法（１）ＩＴＲＯＮの作り方
ITRON そのものを開発するための本として、「ITRON 標準ガイドブック 2」（パーソナルメディア)より出版されており、「PartⅢITRON を作りたい人のために」を順を追って説明する。カーネルの基本的標準的用語および技法をについて学ぶ。
（イ）タスクディスパッチャの起動方法（ロ）TCB の作り方
（ハ）レディーキューの作り方（ニ）排他制御について
３．RaspberryPi 用ＴＯＰＰＥＲＳ／ＳＳＰ実行環境構築（１）最少セットカーネルＴＯＰＰＥＲＳ／ＳＳＰの特徴（２）ＴＯＰＰＥＲＳ／ＳＳＰ実行環境構築作業（３）ＴＯＰＰＥＲＳ／ＳＳＰ演習プログラム
４．ＴＯＰＰＥＲＳ／ＳＳＰカーネルソース解析説明（１）ＴＯＰＰＥＲＳ／ＳＳＰカスタマイズ

4

（イ）ブート部分および割り込みハンドラ部解析（ロ）タスクディスパッチャおよびスケジューラ解析（ハ）サービスコール部解析
５．実装実習（１）仕様の確認・検討（構想設計）
イ．待ち状態を持つカーネルの設計（２）実装
イ．コンテキストの保存と復元
ロ．サービスコール部の作成（３）カーネル拡張
イ．実装に必要な項目の整理
ロ．強制タスク終了の実装(ｔｅｒ＿ｔｓｋ）（４）評価・改善イ．制作したカーネルを用いる際の問題点の把握
ロ．問題点の改善
６．まとめ（１）実習の全体的な講評及び確認・評価
さらにどういったスケジューラを実装できるかなど検討します。
3.受講者向けの開発キット DVD
まっさらの Windows7 64bit 版以降を対象にこれをセットアップすれば統合環境(eclipse 日本語) gdb ソースレベルデバッグ(openocd 含む)ができるものをインストール説明書とともに納められています。また、JTAG の接続図と JTAG openocd の接続手順書も含まれます。自作 OS セミナ以外にも、Raspberyy Pi のベアメタル環境構築環境として利用でき汎用的な情報と考えています。
この DVD は CotiributeSoftware のページでの ISO イメージの公開をしたいと考えています。
以下の内容となる予定です。
1）インストール説明書
2)EclipseIDE 日本語 含む mingw3)windows 版 openocd.exe(0.10.0) （linux 環境でビルドしたもの）
4)teraterm
5)arm32bit win64 用クロスコンパイラ
6)JTAG Windows ドライバ

Windows ドライバ設定ツール

7)JTAG openocd 用設定ファイル
8)シリアル USB ドライバ
9)JTAG 設定説明書（結線図を含む）

5

以上になりますが、大変申し訳ありませんが、今回のアイデアコンテスト応募時点で全てできあがっていません。1.教材用 RTOS(TOPPERS/SSP の改造版)のみ完成した状態です。
ですが、教材テキスト演習問題は、RenesasRX 用のものを流用、開発キット DVD は自分が設定した内容を再度手順書にまとめる作業なので、もうしばらくお待ちいただくことをご了承いただきたくよろしくお願いいたします。
以上

6