先月半ばにブログを更新しようと途中まで記事を書いたのですが、そのままになっていました。

今回はTI MPS430マイコン向けに書かれたMecrispを、Cortex-M0/M3/M4に対応させたMecrisp-Stellarisにフォーカスを当てます。どちらもドイツのMatthias Kochによってアセンブラーで書かれたネイティブなForthで、PropellerForthの作者cbiffle(Cliff L. Biffle)がNXP LPC1700マイコン向けに書いたM3Forthにインスピレーションを得ているということです。

cbiffleはLPC1768にForthを実装するにあたり、Cortex-M3アーキテクチャーに向くスレッデッド・コード構造を考えM3ForthにSTC(Subroutine Threaded Code)型を選択しました。それに倣ってMecrispMecrisp-StellarisもSTC型で、高速な動作を目指した最適化が施されています。そして、現状では前者よりも後者のバージョンの方が新しくなっています。

以下、Mecrisp-Stellarisがインプリメントされているターゲットのリスト。

It runs out of the box on:
– TI Stellaris/Tiva Launchpad with LM4F120H5QR / TM4C123GH6PM
– TI Tiva Connected Launchpad with TM4C1294NCPDT
– TI MSP432 Launchpad with MSP432P401R
– STM Nucleo L152RE with STM32L152RE
– STM Nucleo 401RE with STM32F401RE
– STM F0 Discovery with STM32F051R8
– STM VL Discovery with STM32F100RB
– Shenzhen LC Technology board with STM32F103C8T6
– STM F3 Discovery with STM32F303VCT6
– STM F4 Discovery with STM32F407VGT6
– STM F429 Discovery with STM32F429ZIT6
– Freescale Freedom FRDM-KL25Z with KL25Z128VLK4

– Breadboard friendly, DIP packaged LPC1114FN28
– LPC1115FBD48
– Very small TSSOP20 packaged STM32F030F4

Contributions:
– Teensy 3.1 with MK20DX256VLH7
– Chinese QF-LM4F232 with LM4F232H5QC
– nRFgo Starter Kit with nRF51822

これらの中から、まず、STM Nucleo-F401REにインストールしてテストしてみます。Ubuntu環境のPCではst-flashを使う準備から。(Windows環境ではSTM32 ST-LINK utilityを使うのが簡単です。)

sudo apt-get install libusb-1.0-0-dev autotools-dev autoconf git
git clone https://github.com/texane/stlink stlink.git
cd stlink.git
./autogen.sh
./configure
make

USBケーブルでNucleo-F401REをPCに接続して、フラッシュ・メモリーの消去とバイナリー・プログラムの書き込みをします。(バイナリー・ファイルは予め落としておいたものを、クローンしたstlink.gitのディレクトリーへ移動しておきます。)

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

これで移動前のバイナリー・ファイルが入っていたディレクトリーにあるterminalを端末スクリーン上で起動すると、picocomが走り出してNucleoのリセット・ボタンを押すとメッセージが出ます。(送られて来るメッセージを青色にしています。)

Terminal ready
Mecrisp-Stellaris 2.1.1 for STM32F401 by Matthias Koch

wordsと入力すると辞書に登録されているワードのリストが表示されます。標準ANS Forthの拡張版という印象ですが、基本的なワードのみでI/Oやファイル操作などの機能は含まれていません。面白いのは多バイト言語対応のためか、日本語のテキスト表示が可能なだけでなく、日本語のワードも定義できるという点です。

: ぉぃ ." 鬼太郎!" ; ok.
ぉぃ 鬼太郎! ok.

USBケーブル1本の接続のみでテストできて、そのまま元の状態に復帰できるので、一度mbedから脱してForth環境を試してみるのも良いと思います。なお、最新版のmecrisp-stellaris-2.1.1.tar.gzは先の日曜日にリリースされたばかり!

http://sourceforge.net/projects/mecrisp/files/

長くなってしまったので、STM32F4 DiscoveyとNXP LPC1114FN28 (NeXtPino)でのレポートを続編に書く予定です。

おまけ: ForthのスクリプトでGコードをデータ出力し、プロッティングしている例。