LPC11U35のコンパイルと書き込み
LPC11U35のプログラムをコンパイルするにあたって、まず問題になったのが、実は開発環境である。 mbedが終了したので、ローカルに環境を整える必要がある。 その候補として、MCUXpresso IDEという統合開発環境や、LPCOpenとかMCUXpresso SDKというライブラリなどがNXP社から提供されている。 しかし、一つのマイコンを使うためだけに、わざわざ使ったことの無い統合開発環境を使うのも面倒だし、ライブラリをダウンロードするのに、アカウントが必要だったりと、敷居が高い。 いろいろと調べていたら、githubにLPC11U_LPC13U_CodeBaseというものを見付けた。 これらのマイコンを積んだ様々なマイコンボード用に作られたもののようだ。 LPC11U37がサポートされており、仕様の近いLPC11U35もなんとかなりそうである。 他にも良いものがあるかも知れないが、とりあえずこれを使ってみることにした。
まず、Debianにコンパイラなどを入れるために、以下のコマンドを実行した。
sudo apt install build-essential gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi picolibc-arm-none-eabi
そしてgithubから落してきたzipを展開する。 LPC11U35用にメモリの容量を書き換えて、cmsis/lpc11u35.ldを作る。 mainがどこにあるのか見付けるのに苦労したが、src/boards/の中のマイコンボード用のフォルダのどれかに入っており、そのマイコンボードはMakefile中で指定されている。 新しくボードのフォルダとファイルを作って、それをLPC11U35用に書き替える。 Makefileが長く、様々なライブラリも同時にコンパイルされるので、無駄が多いように感じるが、さらにそこにmruby/cのファイルもコンパイルするように追加する。 また、コンパイルした後に、チェックサムを追加するツールがtools/lpcrcにあるので、これを実行できるように、そのフォルダでmakeを実行しておく。 これで準備が完了で、makeとすると、多くのファイルがコンパイルされて、bin/firmware.binができる。
書き込みは、少し特殊である。 ISPモードで立ち上げると、PCにはディスクとして認識されるので、そこにfirmware.binをコピーすると、flashへの書き込みが行われる。 残念ながらDebianではファイラからこのディスクにはファイルのコピーが行えないので、以下のようなコマンドでコピーする。
sudo dd if=bin/firmware.bin of="/media/USER/CRP DISABLD/firmware.bin" conv=notrunc; sudo sync
USERのところは、適切に変更して、ディスクの取り外しもきちんとした方が良いだろう。
flashは64kなので、FLOATとTASKとmrblibは消した状態で、mruby/cに基本的な機能のAPIを組み込んでコンパイルしてみたら、それなりの容量になった。 これに標準入出力としてUSB-CDCを加えたら、容量が64kを越えるのでは無いかと心配になる。 DEBUGを無効にするのを忘れていて、それを指定したら多少はましになったが。 Stringを消すのも方法だが、できればやりたくない。 さらにmrbコードを保存する容量も確保しないといけないのに。