(Off site developmet w/ FreeRTOS)
概要
ハードウェア
ソフトウェア
ソフトウェアソースコード
参考文献
変更履歴 2010年3月14日 新規作成 2010年3月21日 ソフトウェア部分追加 2010年9月11日 新ページに移行 |
LPC1768に関係する内容は 再構築してこちらにまとめました |
変更履歴
2010年3月14日 新規作成
2010年3月21日 ソフトウェア部分追加
mbed上でFreeRTOSを動作させて、ネットワーク接続と テキスト表示LCD(40文字x2行)を動作させた |
LPC1768 ----- 概要
PICのデータロガーではFreeRTOSを使っていたので、LPC1768の開発でも同じ環境を作れないか検討してみました。
mbedのホームページでFreeRTOSの検索をすると、早速Forumの一つにこの話題が取り上げられていました。
Andy C氏によってFreeRTOSをオフラインでコンパイル後に動作させる方法が、このスレッドで記述されています。
そこで、下記のトライアルを試みました。
mbedのコネクタ40ピンには、当面このようにIOを配置することに決めました。
(1) LCDテキスト表示
ジャンク品で確かな仕様は不明ですが、日立製HD44780コンパチの入出力で接続して動作しています。
制御信号は、E、R/WそしてRSで、データは、DB7からDB4までの4本で接続しています。
(2) Ethernet接続
秋月で購入したパルストランス内蔵のコネクタ(RJ-45)を使用しました。
接続は、当初苦労したのですが何とか上手く接続出来ました。
(3) SDカード接続
これも以前、秋月で購入していた、SDカードを使用しました。
LPC1768 ----- ソフトウェア
ソフトウェアに関して、下記をまとめました。
<Cortex-M3開発環境の構築>
Eclipseを用いた開発環境の構築を、ZUS氏のこのサイトで勉強させていただきました。
ARM Cortex-M3 開発環境構築方法;//2009.08.12変更
ZUS氏の記述は詳細に亘り、丁寧に説明されていますので問題ないと思いますが、2009年8月時点と比較するといくつかの変更点があります。ZUS氏のサイトと合わせて下記を参照ください。
1) ARM(gcc)がVersion-Upされていて、[Sourcery G++ Lite 2009q3-68 for ARM EABI]となっています。
2) Eclipse IDE for C/C++ DevelopppersもVersion-Upされています。ファイルは[eclipse-cpp-galileo-SR2-win32.zip]となっています。
ZUS氏のサイトでは、GanymedeでしたがGalileoに代わっています。Ganymedeもここからダウンロード出来るようですが、私はGalileoを使用しました。
3) Zylin Embedded CDT(Plug-in for Eclipse)のプラグインが少し厄介で、ZUS氏のやり方とGalileoを使用すると違います。Eclipseで下記の操作で可能です。
尚、JTAG等の処理は今回未実施です。mbedのオンラインで作成したバイナリーファイルと同様に、オフラインで作成したバイナリーファイルをUSB経由でボード上のメモリーにコピーすれば、動作させることができます。
<FreeRTOSのインプリメント>
前述したように、Andy C氏によってFreeRTOSをオフラインでコンパイルして動作させる方法が、このスレッドで記述されており、その内容に従ってインプリメントしました。
先ず、FreeRTOSの入手ですが、最新版(2010/3/19現在)はV6.0.4ですが、私はV6.0.3を使用しました。
ディレクトリを含め、このリストにあるファイルを使用しました。色を付けていないファイルはオリジナルのまま使用しています(但し、USB機能は未確認です)。
main.c、LPCUSB、webseverなどは、下記のディレクトリから持ってきています。
..\FreeRTOS\Demo\CORTEX_LPC1768_GCC_RedSuite\src
Makefile/makedefsは、下記からコピーしてきます。
..\FreeRTOS\Demo\CORTEX_LM3S811_GCC
LCD制御(portlcd.c & portlcd.h)は、LPC2368のDEMOからの流用です。但し、IOポートの記述等を大幅に修正する必要があります。
..\FreeRTOS\Demo\ARM7_LPC2368_Eclipse\RTOSDemo\LCD
Eclipse上での展開は下記のようになります(クリックで拡大)。
LCD関係を除けば、Includeファイルのディレクトリー部分の変更等で内容を大幅に変更しなくてもエラーメッセージ解決だけで、動作が始まります。
<FreeRTOSの動作状況確認>
LCD表示を中心にタスクがちゃんと動作しているかチェックしてみました。
下記がロジアナを使って確認したLCD表示タスクによるLCD制御ラインの波形です。
上記の計測で、起動周期が999.9893mSということで、ほぼ1秒毎の起動が保たれています。
タスクの起動は下記のようになっています。
void vTask2 ( void *pvParameters ){ i = 0; |
ロジアナ解析データから、一行の文字表示に約150mSかかっていることが判ります。
当初、Eクロック発生毎にDelay関数を呼び出していた為に2行40文字表示に1秒近くかかっていました。
それはそれで良いのですが、スピードアップのために細工をしました。
それは、Eクロック発生時に毎回FreeRTOSを介するのではなく、ループのDelayで約3μSの波形を作りました。
CPUの占有率が、IDLE状態として25%ありますので現状ではこれで良いですが、本来は表示時間がかかってもCPUの占有率を下げるためにはループ方法はよい方法とはいえません。
この辺りは、全体システムを構築した際のバランスを見てから決めるべきでしょう。
void Delay_E ( void ){ for ( i=0; i < 50 ; i++ ){ |