FC2ブログ

LPC2388でFreeRTOS_ベース環境作成まとめ

Interface誌のLPC2388基板でFreeRTOSを動かせるようにしてきたが、今後使って行くベース環境ができた(つもり)なので一度まとめておこうと思う。

・コンパイラ:Sourcery G++ Lite for ARM EABI(リンク)から
 arm-2009q1-161-arm-none-eabi.exeをダウンロードし使用した。
・ベース版:FreeRTOS 5.4.2(リンク)
 FreeRTOSについては後閑さんの電子工作の実験室に詳しい説明あり。
・NXP LPC2388用サンプルコード(リンク)
 Sample Code Bundle for LPC23xx/LPC24xx Peripherals using
 Keil's μVision, V1.60 (Mar 10, 2009)に様々なサンプルが収録されており、
 非常に有益。その中からuart.c/target.c/irq.c/fio.cをマージ。
・ググって見つけたLCD表示ライブラリをベースにキャラクタLCD、
 SC1602B表示機能を追加(※)
・Sourcery G++上でのビルド、および前述のuart.c等サンプルコード
 マージの際にはねむいさんのぶろぐを大いに参考に(というより真似)
 させていただきました。感謝いたします。

以下に現在のソースをアップしておく。
ARM7_LPC2388_091002_zip.txt


個人的な記録の意味合いが強いため正常動作を保証するものではなく、参照する際には自己責任ということで。アップローダがzipを受け付けてくれなかったので拡張子をtxtに変えてアップした。ダウンロード後適宜変更していただきたい。

まだまだ整理できていない箇所も残っているがUART出力、LCD表示が可能となったので今後これをベースにしていじって行こうと思う。

※補足:
LPC2368用FreeRTOS Demo(今回ベースにしたFreeRTOS用デモアプリ)にはportlcd.cというLCD表示サンプルがついている。これはもともと前述のNXP サンプルコードから持ってきたもののようだ。これが16x2キャラクタLCD(コントローラはST7066)用コードなのだが、このST7066は今使用しているSC1602Bのコントローラ、HD44780Uと互換性があるらしい。このportlcdが少しの修正で動くのではないかと考えているのだが、今のところうまく行っていない。どっかしょうもないミスをしているのだろうとは思うのだが。。。


[追記]
確認後、10月6日分エントリにあげ直したので削除。

FreeRTOSでキャラクタLCD

FreeRTOSのLCDタスクから先日書いたキャラクタLCD、SC1602BSLTに表示してみた。写真はFreeRTOSのDemoが動作している様子。

P1050318_2.jpg

もともとはOLEDをつないでみようと思っていたのだが、先日キャラクタLCDをいじった勢い(配線しっぱなしだからそのまま使ったとも言える)と、FreeRTOSのデモアプリと親和性が良さそうだったので先にキャラクタLCDに表示してみた。LCDの電源は5Vで動かしているが、3.3V単一電源化は継続調査の課題としよう。

LCD表示タスクとLED点滅タスク、UART出力タスクが同時に動いている。さすがマルチタスク。当たり前のことかもしれないが実際に動くとなるほど、と思う。

ちょこっとプログラミング

最近あまりLPC2388基板を触れていない。FreeRTOSが動作したので(vTaskDelay関数がなぜか動かなかったり、動くようになったりと紆余曲折はあったが原因が解明できていないのでとりあえず割愛)、この上で動くアプリ作ったりいろいろ実験したりしたいとは考えているが、なかなか時間を捻出できないでいる。

でも何かを作るというのはやはり楽しい物なので、次のネタ模索&手慰みにちょこっとプログラミング。テキストベースでオセロゲームを作ってみた。
20090925.jpg

テキスト表示なので見にくくて操作しにくいが、エンジン部分を作るのが目的なので問題なし。128x128DotのOLEDに表示するなら1コマ16x16Dotになる計算か。入力用にUSBキーボードつなぐか、または簡単なボタン(上下左右と決定、取消で6つボタンがあれば十分かな?)実装したらLPC2388基板で動作させてみるかも。もともとは、キーボードかボタンかの入力デバイスが欲しいな、と考えたときに、それを使うアプリとして思いついたのが発端だったので先にオセロを作ってみるというのは順序が逆な気もするが・・・。

FreeRTOSのビルド

先日見つけたFreeRTOSをLPC2388用にビルドしてみようと思う。

ググってみると、こことかここが参考になりそうだ。
しかも読んでいると、今使っているYAGARTOではビルドできたけど動作しなかった、との情報あり。Codesourceryが良いらしいので早速インストールする。このCodeSourcery、ダウンロードしてきてインストールするだけでARM用gcc環境ができる。cygwin上で何時間もかけてgccコンパイルした(しかも失敗した)のは何だったのか、という気分になる。

それはさておき、FreeRTOSである。最新バージョンの5.4.2をダウンロードし、展開した中にLPC2368用に移植された物があったのでこれをベースとしてMakefileをちょっと書き換え、ビルドしてみる。

(1)
error Please uncomment one of the two configPINSEL2_VALUE definitions above, depending on the revision of the LPC2000 device being used.

なるエラーが出た。

FreeRTOSConfig.h
/* Value to use on old rev '-' devices. */
//#define configPINSEL2_VALUE 0x50151105
/* Value to use on rev 'A' and newer devices. */
//#define configPINSEL2_VALUE 0x50150105

#ifndef configPINSEL2_VALUE
#error Please uncomment one of the two configPINSEL2_VALUE definitions above, depending on the revision of the LPC2000 device being used.
#endif

ふむふむ、どっちか選べ、と。下の0x50150105を有効にしてみた。

(2)
こんどは
no memory region specified for loadable section '.ARM.exidx'
とのエラー。前述の参考にしたサイトの”ねむいさんのブログ”に回避方法の情報あり。

.ldファイルに下記を追加
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } > flash

(3)
次は_sbrk,_write,_close,_fstat,_isatty,_lseek,_read
がundefinedでエラー

またも"ねむいさんのブログ"みてみると、この辺の関数を実装してあるようだ。ありがたくダウンロードさせてもらい、マージする。ついでにldファイルをLPC2388用に変える。
結果、無事ビルドが通った。

まずはLEDチカチカを組み込んでみて、動作確認。

P1050245_2.jpg

最初にこの基板の動作確認した際と見た目は変わらないが、今回のはFreeRTOS上のLED点滅タスクの上で動作しているので内容が大きく違う。

今後はファイルシステムやOLED表示処理などを組み込んでみようと思う。

OS搭載計画

Interface誌のARM(LPC2388)基板、これからどう料理して行こうか考え中だが、何を作る/実験するにしろOSがあった方が便利かと思い、物色してみた。ARM7なので仮想メモリが使えずLinuxは無理らしい(そもそもRAMが足りないし)。

調べてみるとμITRON準拠のTOPPERSなるOSをLPC2388に移植する、という物がでてきた(リンク)。

他にも無いかと漁って見ると、FreeRTOSなるOSがあるらしく、LPC2388で動かしている人もいるようだ。このOSは各種マイコンに移植されているそうだが、早速ダウンロードしてきて展開してみるとLPC2368用のプロジェクトも入っていた。これを少しいじったらLPC2388でも動くんではないか?面白そうなのでもうちょっと調べてみよう。

以上、メモ書きでした。
検索フォーム
カレンダー(月別)
07 ≪│2019/08│≫ 09
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
RSSリンクの表示
リンク
QRコード
QRコード