chakokuのブログ(rev4)

日々のごった煮ブログです

runtime library等を介さずmicro:bitを素で走らせてみる(半分妄想)

micor:bitは教育用のワンボードコンピュータで、多くの開発用言語が提供されている。特に、Pythonでさくさくと組めるがありがたい。だけど、、Pythonだとメモリ空間がパツパツで?bluetoothのライブラリがもう乗らないらしい。bluetooth(BLE)を使いたい場合はJavascriptを選ぶ必要がある。そこは残念。だったら、Pythonとかよくできた上等なインタプリタを使わず、また、何層にもなっている、ランタイムライブラリも使わず、素*1でハード直叩きで動かしたらどうなのか?
内蔵されているメインのマイコンは、Nordic SemiconductorのnRF51822で、フラッシュ:256KB、RAM:16KBと広大?なメモリ空間が使える。。はず。。
今作ってる俺VTLがコンパクトに作れたら、micro:bitに乗せて、あれこれ動かしてみたいが。。どうなることか。。続ける意味があるかどうかは、今のmicro:bitに搭載されている、Pythonインタプリタ+ランタイムライブラリよりも俺VTLがコンパクトに作れるかどうか(サイズで負けたら置き換える意味なし)。さらに、、最後まで飽きずに続けられるかどうかが課題。。

Wikiを見ていたら、すでにmicro:bit用Forthもあるらしい。Forthもなかなかお茶目な言語だけど、、micro:bitでForthを使う人いるのだろうか。。VTLもさらにキワモノなのだが。こんなことやって何の意味があるのか。。ふと我に返る。。しかし他にやることもないし。。(リカレントネットニューラルワークのスクラッチテーマもあるが、簡単に取り組むには自分の頭のレベルとしては超難しい。。だから。。少しずつ時間をかけて壁を崩す必要あり。。)

■補足
ランタイムを使わずにハードじか叩きと書いてるけど、BLEを動かすには正しいプロトコルが必要で、さすがにそれにはランタイムライブラリのお世話になる必要あり。だから、、Lチカとか、I2C経由で加速度センサーの値読むとかその程度なら、ライブラリに頼らず素で組めるけど、通信をしたいなら、最低、Nordic nRF51822 SDKのレイヤーは入れる必要があると思う。自分で書いておきながらすでに自己矛盾だが。。まぁ仕事じゃないから自己矛盾もOK
ライブラリ使いながらBLEを動かすとかなり勉強になるのだろうなーーと思いつつ、、

■追記
以下のJELLYWARE様のBLE超入門を読んでると、ライブラリの苦労はおいといて、BLEってのは、使うだけならめちゃ簡単なのか??と思い始めて、、だったら最低限のランタイムは入れてBLE通信させてみるか。。と。。いきなり方針転換。
http://jellyware.jp/kurage/bluejelly/ble_guide.html

■開発環境構築
Interface誌(2018/6 P82)を参考に、Segger Embedded Studioをインストールして、簡単なサンプルを走らせてみた。左の画面が開発統合環境(IDE)のEmbedded Studioで、プロジェクトの作成・ビルド・デバッグが可能。個人利用なら無料、SeggerのサイトからDLできる。

Seggerのサイトで、J-Linkの最新版モジュールリリースと、それに合わせて、micro:bit用のLEDブリンクサンプルが付いていたのでそれを走らせてみた。

ちなみに、、単なるLEDブリンクサンプルの場合、スタートアップが0.9K、メインのコードが0.1Kで、コード領域は合計1KB程度に収まっているようである。ただ、デバッグ用のライブラリも組み込まれているようだけど、そちらはサイズがちと分からず。
ご参考:
最初、デバッガとJ-LINK(micro:bit)との接続時、下記のエラーが出て正常に接続できなかった。

Segger Failed connect to target
no idcode detected

どうもこれはツール間のバージョン不整合によるもののようで、原因を切り分けようと、JLINKツール(JLink_Windows_V632i.exe)をインストールした際に、V6.31i of J-Link Software(DLL V6.32i)に更新しますとメッセージが出て、バージョンが更新された後、接続エラーは発生しなくなった。この教訓として、ツール類はすべて最新に揃えること。

■ご参考URL
micro:bitの回路図
https://github.com/bbcmicrobit/hardware

nRF51822のまとめサイト
https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF51822
nRF51822ダウンロードまとめ
https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF51822#Downloads

nRF51822の仕様書(ダウンロードされます)
Product Specification v3.3
https://www.nordicsemi.com/eng/nordic/download_resource/62726/14/45133233/13358
nRF51 Series Reference Manual Version 3.0
https://www.nordicsemi.com/eng/nordic/download_resource/62725/13/73681728/13233

SDK(softdevice) DLリンク
https://www.nordicsemi.com/eng/nordic/download_resource/53724/11/69706129/95150

SeggerのIDEダウンロードサイト
https://www.segger.com/products/development-tools/embedded-studio/

micro:bit用J-Link最新版DLサイト(お試しプロジェクト(Lチカ)もあり)
https://www.segger.com/products/debug-probes/j-link/models/other-j-links/bbc-microbit-j-link-upgrade/

getting_started_ses.pdf
http://infocenter.nordicsemi.com/pdf/getting_started_ses.pdf

さすがにマイコンの仕様書だけ見ながらI/Oを叩くのはつらすぎるので、、SDKのサンプルをちゃっかり参照。。(チートというやつでしょうか)
http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.0.0%2Findex.html&cp=4_0_0

BLEの説明資料(よくまとまっている印象)
https://www.slideshare.net/edy555/ble-deospart1

*1:Interface誌だとベアメタルプログラミングと書いているけど。。ベアメタルってクラウド化に対して物理ハード直結(昔の仮想化レイヤーなしの構成)という意味で使われ始めたと理解していて、ライブラリを使わないプログラミングがベアメタルプログラミングなのか??ちょっと疑問が