さて、次にSTM32F4 Discoveyにインストールしてみます。前記と同じくPCにUbuntu機を使っています。

sudo ./st-flash erase
sudo ./st-flash write mecrisp-stellaris-stm32f407.bin 0x08000000

ポートのPA2(TX)とPA3(RX)に3.3VレベルのUSBシリアル変換チップの入出力を結線してGND間を繋ぎ、PCのUSB端子に接続します。これで次のようなコマンドでPC側のシリアル・ターミナルを起動すればSTM32F4 Discoveyと通信できるようになります。

picocom -b 115200 /dev/ttyUSB0$n --imap lfcrlf,crcrlf --omap delbs,crlf --send-cmd "ascii-xfr -s -l 50 -n"

こちらもWindows環境での書き込みにはSTM32 ST-LINK utilityを使うのが簡単です。シリアル・ターミナルは入出力にUSBポートを指定できるものなら何でも良いでしょう。(リセット後に送られて来るメッセージを青色にしています。)

Mecrisp-Stellaris 2.1.1 for STM32F407 by Matthias Koch

作者のMatthias Kochは研究室でSTM32F407によるADC入力を実現しているそうですが、その反映かADC入力、DAC出力、ボタン入力、タイマー・ディレイ、LED点滅、PLLクロック設定、乱数生成のスクリプトが、配布しているディレクトリーに収められています。

もう一つ、NXP LPC1114FN28 (NeXtPino)にもインストールしてみます。1KΩの抵抗でP0.1(24ピン)をGNDに落としてリセット・ボタンを押せばシリアル・ブートローダーが起動するので、ダウンロードしておいたバイナリー・プログラムをPC上のツールを使って書き込みます。これには都合でWindows環境のFlash Magicを使いました。

NeXtPino:提供 ITショップ「えとせとら」

PC上のUSBシリアル・ターミナルを起動してリセット・ボタンを押すとメッセージが出ます。

Mecrisp-Stellaris 2.1.1 with M0 core for LPC1114FN28 by Matthias Koch

15Kバイト強のプログラムをロードして2KバイトのSRAMを使っていますが、スクリプトを書くのに未だ十分な余裕が残っています。これもADC入力、LCD出力、LED点滅、I2C、PWM、PLLなどのスクリプトが、配布しているディレクトリーに収められています。

さて、Forthの欠点の一つにスタック操作のオーバー・ヘッドが挙げられます。この欠点を補うため、Mecrisp-Stellarisでは基本的なスタック操作ワードのインライン化が行われ、その他に定数の埋め込みやループ系ワードのインライン化など、高速な動作のための最適化が図られています。現在のIDEとターゲットを行きつ戻りつする一般的な開発方法と比べて、対話型のForth環境ではプログラミング~実行~デバッグのターン・アラウンド・サイクルが短かく、集中度が上がるために効率的だといわれています。


おまけ:

右のイメージは1980年8月号のBYTEマガジン「The Forth Language」の表紙です。Dr. Dobb’s Journalなどの専門誌で限定的にしか扱われていなかったForthを、初めて大手の雑誌が特集したのはエポック・メイキングな出来事でした。

それまでにも天文学や航空宇宙関連のプロジェクトに使われていたForthですが、この特集号によって広く紹介され、より多くのユーザーを生み出しています。そして、私もそのうちの一人というわけです。

現在、そのアーカイブが残っていて全てのページを読むことができます。

Byte Magazine Volume 05 Number 08 – The Forth Language
https://archive.org/details/byte-magazine-1980-08