もうそろそろMbed OS 6
頻繁に拡張、改善、リリースが繰り返されているMbed OSが5から6へとバージョンアップされます。
Githubのリポジトリを見てみると6/1時点でmbed-os-6.0.0-rc1までリリースされているので、正式リリースはそろそろだと思います。
Mbed OSとは
そもそもMbed OS(Mbed)とは、Arm Cortex-Mマイコン向け(一部、Cortex-Aも)のソフトウェアプラットフォーム、開発ツール/サービスを指します。
昔は「Rapid prototyping tool」となっていたと思いますが、今は「Rapid IoT device development」と称されています。
ソフトウェアプラットフォームは、さまざまなライブラリを含むリアルタイムOSとなっていて、マイコンのペリフェラル(GPIO、UART、I2C、SPI等)やOSの機能を簡単に扱えるAPIがサポートされています。Mbed OSに対応したボードであれば、CPUベンダーやボードの違いをほとんど意識することなくプログラミングすることができます。
また、Mbed OSはIoT向けに特化され、Wi-FiやBluetooth、LTE、LPWA等の通信ライブラリやセキュリティ通信を含むプロトコルスタックがサポートされています。
開発ツールとしては、手軽にプログラミングできる環境として、ブラウザ上で動作するMbedオンラインコンパイラが用意されています。また、オフラインでテストやデバッグもできるMbed CLIやMbed Studioも用意されています。
Mbed OS 5の現状
Mbed OS 5は、5.15.3までリリースされています。一般向けに5.1がリリースされてから、おおよそ3ヵ月おきにメジャーバージョンが上がり、機能追加やバグフィックス、対応プラットフォームの追加が行われてきました。対応プラットフォームの数も111となっています。そのため、ソフトウェアが肥大化している感じがします。
Mbed OS 6の変更点
Mbed OS 6の変更点は以下のようになっていると思います。
- 軽量化
- APIとプラットフォームの整理
- サポートするコンパイラのバージョンアップ
- Arm Compiler 5 -> 6
- GCC ARM 6 -> 9
- ベアメタルプロファイルの正式サポート
- 対応プラットフォーム以外の追加が楽になった
実際にMbed OS 5.15.3と6.0.0-rc1を比べてみました。
軽量化?
mbed-os-example-blinkyをMbed CLI(GCC)でコンパイルして、差を見てみました。プラットフォームはMbed OSで標準的なFRDM-K64Fを指定してます。
Mbed OS 5.15.3
> mbed compile -t GCC_ARM -m K64F
| Module | .text | .data | .bss |
|------------------|---------------|-------------|-------------|
| [fill] | 103(+103) | 0(+0) | 2317(+2317) |
| [lib]\c.a | 22945(+22945) | 2472(+2472) | 89(+89) |
| [lib]\gcc.a | 3168(+3168) | 0(+0) | 0(+0) |
| [lib]\misc | 224(+224) | 4(+4) | 28(+28) |
| [lib]\nosys.a | 32(+32) | 0(+0) | 0(+0) |
| main.o | 48(+48) | 0(+0) | 0(+0) |
| mbed-os\drivers | 194(+194) | 0(+0) | 0(+0) |
| mbed-os\hal | 1719(+1719) | 8(+8) | 131(+131) |
| mbed-os\platform | 6147(+6147) | 260(+260) | 221(+221) |
| mbed-os\rtos | 8217(+8217) | 168(+168) | 5972(+5972) |
| mbed-os\targets | 9317(+9317) | 36(+36) | 386(+386) |
| Subtotals | 52114(+52114) | 2948(+2948) | 9144(+9144) |
Total Static RAM memory (data + bss): 12092(+12092) bytes
Total Flash memory (text + data): 55062(+55062) bytes
Mbed OS 6.0.0-rc1
> mbed compile -t GCC_ARM -m K64F
| Module | .text | .data | .bss |
|------------------|---------------|-------------|-------------|
| [fill] | 99(+99) | 0(+0) | 2181(+2181) |
| [lib]\c.a | 11528(+11528) | 2472(+2472) | 89(+89) |
| [lib]\gcc.a | 832(+832) | 0(+0) | 0(+0) |
| [lib]\misc | 224(+224) | 4(+4) | 28(+28) |
| [lib]\nosys.a | 32(+32) | 0(+0) | 0(+0) |
| main.o | 48(+48) | 0(+0) | 0(+0) |
| mbed-os\drivers | 206(+206) | 0(+0) | 0(+0) |
| mbed-os\hal | 1719(+1719) | 8(+8) | 131(+131) |
| mbed-os\platform | 7497(+7497) | 260(+260) | 357(+357) |
| mbed-os\rtos | 8401(+8401) | 168(+168) | 5972(+5972) |
| mbed-os\targets | 9317(+9317) | 36(+36) | 386(+386) |
| Subtotals | 39903(+39903) | 2948(+2948) | 9144(+9144) |
Total Static RAM memory (data + bss): 12092(+12092) bytes
Total Flash memory (text + data): 42851(+42851) bytes
Static RAMは双方 約12KBと変わりませんが、Flashは10KB以上減ってますね。ここら辺が軽量化の結果でしょうか。主に[lib]\c.a(C標準ライブラリ)
で使用しているサイズが減ってます。
ベアメタル版のmbed-os-example-blinky-baremetalでも見てみました。
> mbed compile -t GCC_ARM -m K64F
| Module | .text | .data | .bss |
|------------------|---------------|-----------|-------------|
| [fill] | 66(+66) | 0(+0) | 2328(+2328) |
| [lib]\c_nano.a | 4485(+4485) | 100(+100) | 12(+12) |
| [lib]\gcc.a | 832(+832) | 0(+0) | 0(+0) |
| [lib]\misc | 224(+224) | 0(+0) | 28(+28) |
| [lib]\nosys.a | 48(+48) | 0(+0) | 0(+0) |
| main.o | 140(+140) | 0(+0) | 4(+4) |
| mbed-os\drivers | 136(+136) | 0(+0) | 0(+0) |
| mbed-os\hal | 1719(+1719) | 8(+8) | 131(+131) |
| mbed-os\platform | 6445(+6445) | 4(+4) | 239(+239) |
| mbed-os\targets | 9317(+9317) | 36(+36) | 386(+386) |
| Subtotals | 23412(+23412) | 148(+148) | 3128(+3128) |
Total Static RAM memory (data + bss): 3276(+3276) bytes
Total Flash memory (text + data): 23560(+23560) bytes
RTOSが無くなっているのとC標準ライブラリは軽量のものを使用するようになっています。
ちなみにLPC1114FN28でもコンパイルしてみました。
> mbed compile -t GCC_ARM -m LPC1114
| Module | .text | .data | .bss |
|------------------|---------------|-----------|-----------|
| [fill] | 206(+206) | 0(+0) | 11(+11) |
| [lib]\c_nano.a | 2532(+2532) | 100(+100) | 12(+12) |
| [lib]\gcc.a | 964(+964) | 0(+0) | 0(+0) |
| [lib]\misc | 216(+216) | 0(+0) | 28(+28) |
| [lib]\nosys.a | 16(+16) | 0(+0) | 0(+0) |
| main.o | 136(+136) | 0(+0) | 16(+16) |
| mbed-os\drivers | 84(+84) | 0(+0) | 0(+0) |
| mbed-os\hal | 1616(+1616) | 4(+4) | 67(+67) |
| mbed-os\platform | 4736(+4736) | 4(+4) | 298(+298) |
| mbed-os\targets | 1698(+1698) | 4(+4) | 16(+16) |
| Subtotals | 12204(+12204) | 112(+112) | 448(+448) |
Total Static RAM memory (data + bss): 560(+560) bytes
Total Flash memory (text + data): 12316(+12316) bytes
ベアメタルプロファイルだとここら辺のマイコンを手軽に扱うのがちょうどいい気がします。
プラットフォームの整理?
コードの差分からサポートされなくなったプラットフォームを調べてみました。Mbed 5.13.3と比べてMbed 6.0.0-rcで無くなっているプラットフォームは以下になります。
- SDP_K1
- GD32-E103VB
- Nordic nRF51-DK
- Switch Science mbed TY51822r3
- u-blox EVK-NINA-B1
- SDT51822B
- u-blox C027
- EA LPC4088 Display Module
- FRDM-KW24D512
- FRDM-KL82Z
- LPCXpresso55S69
- HANI-IOT
- EFM32 Wonder Gecko
- EFM32 Leopard Gecko
- EFM32 Pearl Gecko
- NUCLEO_F410RB
- B96B-F446VE
- u-blox EVK-ODIN-W2
- u-blox C030-U201 IoT Starter Kit
- u-blox C030-N211 IoT Starter Kit
- u-blox C030-R412M LTE CatM1/NB1 and 2G
- Avnet Silica ST Sensor Node
- AdBun-M066
- AdBun-M3H6
- AdBun-M3HQ
FlashやRAMが少ないマイコンやCortex-M0が厳しくなってきた感じですかね。
(コードから調べた限りなので、正式な情報ではありません)
あとがき
まだここでは書けませんが、わくわくするような情報もあるので、Mbed OSは今後期待ですね。
著書のMbed OS 6版も執筆中なので、さらに情報を纏めてリリースしたいと思います。
Author And Source
この問題について(もうそろそろMbed OS 6), 我々は、より多くの情報をここで見つけました https://qiita.com/jksoft/items/e79cfb954240a8d83f0f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .