
TOPPERSは、7年ほど前に趣味でVFDパネルを動かして遊ぶのにTOPPERS/JSPカーネルを秋月のH8/3069Fボードで使用したことはありましたがそれっきりいじっていませんでした。
今回はたまたま、CQ出版のInterface 2012年11月号で「リアルタイムOS「TOPPERS/SSP」誕生!」という記事がありまして、では僕もいじってみたいなーと思い、お試ししてみました。
Interface (インターフェース) 2012年 11月号 [雑誌]
posted with amazlet at 12.10.14
CQ出版 (2012-09-25)
TOPPERS/SSPは最小セットカーネルと呼ばれるだけあり、かなり小さいメモリーサイズで動作するカーネルだそうで、実際Cortex-M3の環境でROM 3kバイト、RAM 24バイトであるとの事でした。
今回は、STマイクロのCortex-M4FマイコンボードのSTM32F4-discoveryを持っているので、STM32F4用に移植して動作させてみることにします。
TOPPERS/SSPに関しては以下のサイトを御覧ください。
http://www.toppers.jp/ssp-kernel.html
既にDesignWaveマガジン付属CQ_STARM用、R8C用、Interface付属RX62N用のツリーがアップされています。
今回はSTM32F4にポーティングする元となるツリーとして、CQ_STARM用をダウンロードしました。
CQ_STARMは、STマイクロのSTM32F103VBT6を使用したボートです。(多分このボード僕も持っていると思うのですが、積み基板ボックスを漁りましたが見つかりませんでした。変だなー・・・)
STM32F4-discovery(STM32F407VGT6)で動作させるには最も筋が良いでしょうね。
こんなのです。
http://www.cqpub.co.jp/dwm/Contents/0126/dwm012600520.pdf
TOPPERS/SSPはいくつかのディレクトリで構成されているのですが、アーキテクチャ別のディレクトリ(./arch)とターゲット別のディレクトリ(./target)があり、ポーティングは主にその中をいじれば良いようになっているようです。
今回はSTマイクロのCortex-M3用がベースなのでarch以下はいじらず、./target以下だけをいじっています。
主に周辺機能周りのレジスタとか、アドレスマッピング等はSTM32F1とSTM32F4とでは差分があり、STマイクロの仕様書を見ながら変更していきました。
それなりに試行錯誤もありまして、ソースがごちゃごちゃしたのでgithubに上げる際にソース整理しました。
STM32F4-discovery用TOPPERS/SSP(お試し)は以下のgithubのリポジトリで公開していますので、以下からダウンロード、ビルドしてお手持ちのSTM32F4-discoveryに焼き込めば動作するはずです。
https://github.com/yishii/toppers_ssp_stm32f4_discovery
電源投入すると、加速度センサー周辺の4 LEDは点灯状態になりますので動作したかわかりやすいかと思います。
具体的な改変内容はgithubのコミットログを御覧くださいませー。
なお、コンパイル方法ですが、Windows上で行います。
Cygwinを使用しています。また、Sourcery CodebenchのARMツールチェインをインストールしてパスを通しておきます。無償のLite editionのEABI ReleaseでOKです。
Cygwinは、DevelopmentのカテゴリをInstallにすれば必要な物は足りるはずです。
Cygwin : http://www.cygwin.com/
Sourcery Codebench : http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/
あと、TeraTermのCygterm機能を使ってCygwinのシェルにアクセスしました(これは必須ではありません)。
実は当初、STM32F4の開発環境をUbuntu上に構築していたこともあり、TOPPERS/SSP関連の開発もUbuntuでやろうと思っていました。
ただ、提供されているTOPPERSのコンフィグレータ(CFG.EXE)はWindows用にビルドされていましたので、コンフィグレータのソースからビルドしてUbuntu上のビルドに組み込んでみたのですが、コンフィグレータ実行時にSIGSEGVが発生してしまいまして、落ちたタイミングでバックトレースするとBOOSTライブラリの奥深くで発生してるようで、コンフィグレータの仕様を理解して解析するのはめんどくさいのでWindowsに乗り換えました。^^;
まずは、githubからソース取得し、展開したらconfigureします。
./configure -T stm32f4_discovery_gcc
そしてmakeです。
make
ビルドに成功すると、「ssp.exe」というELF形式のバイナリを生成しますので、これをSTM32F4-discoveryにロードします。
OpenOCDを起動し、その後シェルから
arm-none-eabi-gdb ./ssp.exe
(gdb) tar extended-remote :3333
(gdb) load ssp.exe
(gdb) c
上記手順で実行開始します。
上記はsample1.cというサンプルコードが実行されます。
sample1.cの操作
シリアル入出力はRxD = PB7、TxD =PB6でボーレートは115200bpsになってます。UART-RS232(またはUSB)変換基板をそのポートに接続して使用して下さい。
マイコンボードの電源を入れると、TOPPERS/SSPのバナー(Copyright表示など)が出てきます。ここで、シリアルコンソールからのコマンド待受けしてますので、TeraTerm等からキーインします。
【タスク関連】--------------------------------
"1" : TASK1を選択
"2" : TASK2を選択
"3" : TASK3を選択
"a" : 選択したタスクを起床(act_tsk)
"e" : 選択したタスクの終了指示メッセージを投げる
"z" : 選択したタスクでCPU例外を発生させるメッセージ
【アラームハンドラ関連】----------------------
"b" : アラーム ALM1を設定(sta_alm)
"B" : アラーム ALM1を停止(stp_alm)
【サイクリックハンドラ関連】-------------------
"c" : サイクリックハンドラ CYC1を起動(sta_cyc)
"C" : サイクリックハンドラ CYC1を停止(stp_cyc)
【その他】-----------------------------------
"Q" : プログラム終了(ext_ker)
--------------------------------------------
なお、ROM/RAMサイズは変更してませんのでSTM32F1のままです。リンカスクリプト(cq_starm_*.ld)を変更するだけで対応できると思います。
※デバッグ環境の、OpenOCDのWindows用については「ねむいさんのぶろぐ」のものをそのまま使用させていただいてます。ありがとうございます。
今回はSTM32F4のブート処理の初期設定をいろいろ調べながら実験していく過程で、いろいろ勉強させていただきました。PIC24に移植してみたいと思っているのですが、PICはソースの公開の制限が大きいので、解決してからにしたいと思います。
ところでどうやら、先日僕にも、Raspberry Piの発送しましたメールが届きまして、間もなく届くのだと思います。7/Eオーダーでしたので長かったー!!
ひとまずここでSTM32F4は区切ってRaspberry Piで遊んでみたいです!
ARMでOS超入門 (ARMマイコン)
posted with amazlet at 12.10.14
桑野 雅彦 岡田 好一 共著
CQ出版
売り上げランキング: 101688
CQ出版
売り上げランキング: 101688
完全版 世界の定番ARMマイコン 超入門キット STM32ディスカバリ: デバッガ搭載&はんだづけ不要!Cortex-M3をホントに始められる (トライアルシリーズ)
posted with amazlet at 12.10.14
島田 義人 永原 柊
CQ出版
売り上げランキング: 39135
CQ出版
売り上げランキング: 39135
これからもSSPを使用させていただきます。
今後ともよろしくお願いいたします〜!!