ここしばらくmicro:bitのベアメタル開発をやってましたが,やったことをいろいろまとめて本にしました.(amazonのKDPです)

https://www.amazon.co.jp/dp/B0HJP943YT/

 

内容的には,以下でやっていることのソースコードをベースにして,コードの説明をしているというものです.

 

第1章ではフルスクラッチのハローワールドのサンプル動作

第2章ではそれのソースコード解説

第3章ではSDKであるnrfxライブラリを利用してのハローワールド

第4章ではKOZOSのmicro:bit移植

第5章ではNLL in micro:bitの使いかた説明

っていう感じです.

 

micro:bitって学校で配られてたりして中学生がフツーに持ってたりするし,インターフェースマイコンのおかげでファームウェア書き込みは簡単だしUSBドライバとか書かずにシリアル通信できるし,組込みや低レイヤーの入門のための題材としてはすごくいいんじゃないかと思います.

 

 

NLL for micro:bit でロボットカー(micro: Maqueen Lite V5)を動かしてみました.

 

多くのセンサ・デバイスはI2C接続の制御用マイコンで制御されているようです.

以下がひととおり動いています.

 

・左右モータ(正回転,逆回転) (I2C)

・超音波距離センサ (HC-SR04)

・赤外線リモコン受信 (NECフォーマット/家製協(AEHA)フォーマット)

・底面LED (NeoPixel)

・底面ブザー

・ラインセンサ (I2C)

・光センサ (I2C)

・前面フルカラーLEDヘッドライト (I2C)

 

即席で書いた簡単なライントレーサが動きました.

 

 

 

12ステップで作る 組込みOS自作入門で開発している組込みOS「KOZOS」を,micro:bitに移植しました.

書籍中では12ステップに分けて開発していくのですが,12ステップぶんのソースコードをすべて移植してあるので,書籍の内容をmicro:bitでなぞることができます.

 

KOZOSのmicro:bit版を公開しました!

 

micro:bit V2 に対応しています.(Cortex-M4)

Cortex-M4の特殊機能みたいなのは使っていないので,おそらくCortex-M3でも動作します.

micro:bitって,県によっては学校で全員に配られたりとかしているようですし遊びで買ったのが家に1枚あるという人もけっこういますし買っても2500円くらいなので,手元にあるmicro:bitでちょっとした組込みOSが動いて実験できる!(しかも12ステップ本という参考書もある!)というのは,組込みシステムの学習にけっこう良いのではと思います.

 

Cortex-M3/M4はOSカーネルなども可能な限りC言語で書けるように工夫されているので,KOZOSも工夫すればアセンブリ部分をかなり削減して共通化などもしてスッキリさせられたのですが,あえてそうせずに書籍のオリジナルコードをなるべく保つようにして移植しました.(書籍の内容をなるべくそのままなぞれるようにするため)

あと,あまり Cortex-M4に依存しすぎて,他CPUに移植しにくくなるのを避けたかったというのもあります.(フツーのマイコンならたいていこういう機能はあるよね,という範囲で書いています)

 

とくに,スレッド用のスタック(PSP)とEXC_RETURNによる復帰をうまく使えば工夫できそうだったのですが,あえてそうしていません.(スタックはMSPしか使っていません)

また,割り込み優先度もすべて0として,多重割り込みの考慮を無くしています.(これはオリジナルコードもそうですが)

 

ついでに追加のステップとして,ROM化とnrfx対応もしています.nrfx対応では,公式のSDKが持っているデバイスドライバを使えるようにしているので,いろんなデバイスを動かすことができるようになると思います.

 

おかげでCortex-M3/M4のことがけっこうわかってきました.

気が向いたら12ステップ本のmicro:bit版を書きたいです.

 

C言語でmicro:bitのプログラムを開発する方法について,まとめました.

元々は NLL for micro:bit を開発するためのお試しサンプルとしてやっていたものですが,これはこれで有用かもと思ったので,まとめて公開したものです.(あと,いろいろWeb検索とかしたのですが,この手の情報はあんまり無いみたいです)

ブラウザを使わずに,gccベースで開発できます.

micro:bitへの書き込みは,micro:bitをUSBメモリとしてマウントし,生成されたhexファイルをコピーしてアンマウントするだけでできますので,Debian GNU/Linuxなどの環境だけで(Windowsを使わずに)開発できます.(私はFreeBSDでやっています)

 

 

 

NLL for micro:bitで簡易PWM発振器を作ってみました.

波形や周波数を指定して,PWMで発振できます.(ローパスフィルタを通せば,アナログ波になるはず)

micro:bitに拡張OLEDディスプレイを接続して利用します.

出力先をmicro:bitのスピーカーにすると,ピーピーガーガーと音を出して遊ぶことができます.

先月の簡易オシロスコープと組み合わせて,出力した波形を確認したりして遊ぶことができます.

 

NLL for micro:bit

↑「アプリケーション」の「簡易オシロスコープ」です