μT-Kernel2.0導入にあたって

# はじめに

そろそろ新しいことやりたいなあ？と思ってたときに，坂村先生[^1]の講演会見て思った．

> これだ・・・俺がやりたかったのは，これだよ！μT-Kernel2.0だ！！

前から，TRON系OSをやりたかったし．
[近々，IEEE標準になる](http://www.tron.org/ja/2017/10/post-3324/)というし．
これはちょうどいいタイミング．[^2]

# 組込みシステム向け

μT-KenerlはT-Kernelシリーズの中でも，MMUを持たないような規模の小さいマイコン向けに最適化されたOS仕様になっている．ARMだとCortex-Mシリーズなんかがそう．俗に言う，ガチの組込み向け．[^3]

# 入手

μT-Kernelの仕様は無料で公開されており，ソースも[トロンフォーラム](http://www.tron.org/ja/)のWebサイトから無料でダウンロードできるのだが，これには落とし穴がある．

## 合わせ込みの問題

タダでダウンロードしてきたソースは，マイコンの機種依存の部分をどうにかしないと，どうにもならないのだ．がんばれば，何とかなりはするのだが，それなりに時間と能力が必要である．特に，アセンブラが必須な部分はかなりめんどい．OSの仕様書を読みながら，命令セットの説明書と，マイコンのペリフェラルの説明書を読みながら実装とか，ものすごく大変．

あと，開発環境に合わせる必要がある．GCCとそれ以外のコンパイラ，あるいは，eclipseとそれ以外のIDEは，やっぱり違うのだ．多分，ダウンロードしたプロジェクトの環境と，自分が使いたい環境，両方の環境について詳しく知っていないと，移植はほぼ無理．

## 時間をお金で買う解決法

というわけで，世の中にはいろんな開発環境やマイコンに合わせ込んだμT-Kernelを販売している業者がある．そこを通して買えば，技術サポートもついてくるし，最初の合わせ込みの時間を大幅に短縮できる．

メーカサイドは1ヶ月ぐらい短縮できると主張しているが，正直，1ヶ月で合わせ込みできる気がしない・・・・・・．合わせ込んだソースの信頼性は，業者側の販売実績で担保されるはずなので，そこまで考えると1ヶ月以上の短縮効果がありそうだ．時間はお金で買えるのだ．[^4]

## フルスクラッチする方法

OSの仕様書は公開されているので，理論上はフルスクラッチは可能だ．ただ，フルスクラッチすると，それだけで商売できてもおかしくない物が成果物として出力される．

特に会社は作業にかけられる時間も重要なファクタなので，作ったOSで商売する気が無いなら，フルスクラッチはやめといた方が良い．

# 参考書

多分，参考書は「T-Kernel組込みプログラミング強化書」（パーソナルメディア）ぐらいかと思われる．
10年ぐらい前の発行だけど，十分使える．[^5]

タイトルは"μ"が付かない方の"T-Kernel"となっているが，仕様的にほとんど同じAPIでできているので，特に問題はない．とはいうものの，いろんな部分で若干違う．公開されているμT-Kernelの仕様書と合わせて読んだ方が良さそうな感じ．

この本のサブタイトルは「開発現場ですぐに役立つ実践テクニック」と書かれている．デバイスドライバとか，どうやって組んでいくかが，実際のソースとともに書かれているのでとても役立つ．特に，仕様書の書き方まで例示してくれているのが良い．LEDの点灯/消灯のデバイスドライバなんかは，周期的に点滅させるとこまで仕様書と実際のソースとが載っているので，ほとんどそのまま書き写すだけで完成してしまうレベルで書いてくれている（機種依存部は通常はGPIOの制御なので，特に問題にはならないだろう）．

# FreeRTOSと比較

一応，FreeRTOSも触っているので，それとの比較．

## ライセンス

FreeRTOSと比べて一番大きいのはライセンスだろう．

FreeRTOSの場合は，GPLの文書を製品に付けたり，ソースの開示義務（制限付きではあるが）もあるので，意外とめんどい．

μT-Kernel2.0のライセンスはT-License2.0．みんなが大好きなGPLではなく，ソースの開示義務が無い．GPLであっためんどくさいことをいろいろやらなくて良くなるので，製品に組み込むためのハードルがものすごく下がる．

あと，T-License文書は日本語で書かれているから，とても読みやすい！そして，短い！

## サポート

FreeRTOSはフリーなので，サポートはWeb上のコミュニティか自力で対応ということになってるはず．

μT-Kernelも基本はそうだと思うが，業者から買うと技術サポートが付いてくるので安心．国内の業者なら日本語で普通に対応可能なのも嬉しい．

でも，Web上のコミュニティって本当にあるのかな？WindowsとかUnixとかそのレベルだといくらでも情報は出てくるが，組込みとなると，なかなか情報が出てこない．組込みは千差万別なので，なかなか外に出せなかったりするのだろうか．あるいは，普通に契約している技術サポートだけで足りてしまっているのか．

## フリーダウンロード

そういや，FreeRTOSは，フリーダウンロードしてきた状態で，あらゆるプロセッサ向けで，複数の開発環境に対応したプロジェクトファイルが入ってた．そういう意味では，μT-Kernelの提供物よりも良いかもしれない．

最終的には，使おうとしているマイコンのよく似た型番のものを改造して使うのだが，それはμT-Kernelを業者から買ってきても同じ話．

## OSの機能（デバイスドライバ）

FreeRTOSは使ってはいたものの，正直，正しい使い方をしていたのか分からないでいる．Webで見かけた情報だけで，適当に使っていた．デバイスドライバは無かったと思うので，自力でAPIをいろいろ作って，ソースファイルのレベルで分離はしていたのだが，結局のところ，デバイスドライバじゃない関数との明確な区別は無かった．

μT-Kernelだと，先の強化書があるので，そこに書いてある通りにデバイスドライバを実装すれば良い．デバイスドライバがOSのレベルで1つのモジュールとして独立しているので，扱いが明確になっている．

## OSの機能（タスク処理）

セマフォとか，ミューテックスとか，基本的な機能はどちらにも実装されている．

μT-Kernelの方にはランデブという機能が実装されてる．[^6]
これは，クライアント--サーバモデルに基づくタスク間通信を行う仕組みである．

# おわりに

個人でリアルタイムOSを使って，ちょっとタスク処理をするぐらいなら，FreeRTOSの方がやりやすいかもしれない．

しかし，μT-KernelはシリーズでAPIが共通化されていたり，便利なタスク機能があったり，やりたいことを実現しやすいのはこっちだと思う．

これからは，μT-Kernel2.0をバンバン使っていくぜ！

---

[^1]: 昔，写真で見たときより白髪増えたな・・・．
[^2]: TRONを最初に知ってから，ちょうど良いタイミングが来るまで，20年かかった．
[^3]: 組込みシステムは大きく分けて，PCベースの組込みと，マイコンベースの組込みがある．ガチの組込は後者．PCベースに比べて制限は多いが，やらないといけないことは意外と多い．
[^4]: 「<ruby><rb>部長</rb><rp>（</rp><rt>パパ</rt><rp>）</rp></ruby>，コレ買って」と上目遣いでおねだりしたら，「おうおう，<ruby><rb>買</rb><rp>（</rp><rt>こ</rt><rp>）</rp></ruby>うたる<ruby><rb>買</rb><rp>（</rp><rt>こ</rt><rp>）</rp></ruby>うたる」と言いながら買ってくれた．偉い人は規格が大好きなので，IEEE標準をちらつかせば，ちょろいもんだぜ！
[^5]: この本はおねだりせずに，自分で買った．技術書は自分用のが欲しい派．
[^6]: 考えることはみんな同じようで，FreeRTOSやってた頃にこういう機能が欲しくてキューを駆使して作ろうとしてた．