CQ出版 Interface誌 2009.5付録基板 LPC2388を何とか使えるようにしたいと思い、悪あがきを続ける。
1.GNU GCCによる開発環境の整備
・バージョン4.3.0 4.4.0 いづれも LED点滅など簡単なプログラムは可能
・複数割り込み等、少々込み入ったプログラムは、一定時間稼動後ハングする。
2.FreeRTOSによる開発プロトタイプの構築
・http://www.freertos.orgにアクセスし、ダウンロードサイト(http://sourceforge.net)からFreeRTOSV5.2.0.zipをダウンロードする。
・zipファイルを展開し、ARM7_LPC2368_Eclipse,Common,SourceのフォルダをCopyし、プロトタイプの構築を試みる。
・ARM7_LPC2368_Eclipse/RTOSDemoのフォルダでバージョン 4.4.0 でmakeを実行
・configPINSEL2_VALUEの未定義エラーが起こる、FreeRTOSConfig.h の #define confinPINSEL2_VALUEのコメントをはずす。
・再度ビルド、 no memory region specified for loadable section `.eh_frame' が起こる。
・適当に、lpc2368.ld(リンカスクリプト)を修正
※追記内容
.eh_frame_hdr : ALIGN (4)
{
KEEP (*(.eh_frame_hdr))
} >ethram <<(ramをethramに変更)
.eh_frame : ALIGN (4)
{
KEEP (*(.eh_frame))
} >ethram <<(ramをethramに変更)
(ramでは「RTOSDemo.elf section .eh_frame will not fit in region ram」ビルドエ- で ethramに変更 これも適当)
・再度ビルド実行 成功 ただし、「does not support interworking」のワーニング表示
・このディレクトリをCopyしRTOS開発環境のプロトタイプとする。
ARM7_LPC2368_Eclipse >> ARM7_LPC2388_Prototype
RTOSDemo >> RTOS_Prototype
lpc2368.ld >> lpc2388.ld ファイル名変更
Makefileの内容も併せて変更 lpc2368 を lpc2388 に変更
ビルドを試す。 >OK
3.FreeRTOSによる開発プロトタイプの構築 その2
プロトタイプへの修正内容
・LCD関連の無効化(将来 SG12864に対応)
・TCP/IPプロセスの無効化
・LEDを 基板LED1 Port1 Pin18に変更
1)FreeRTOSの分析
・main.cの分析
4.自作関数の組み込み
1)LEDコントロールの組み込み
2)LCD(グラフィック)コントロールの組み込み。
不具合
・memset,strcpy,strncpy,strlen,strcatでハングする。
・memset等の関数を自作する。LPC_memset等 とする。
>>一応 動作OK
*memset,strcpy等の標準関数は今後必須としたいので、>>
・コンパイルオプション検討(自作関数用 LPC23Lib.a )
COMPILE_OPTS = -O1 -mcpu=arm7tdmi-s -fomit-frame-pointer -mthumb-interwork
を
COMPILE_OPTS = -mthumb -O0 -v -mhard-float に変更。
(-mcpu=arm7tdmi-s で エラー Error: selected processor does not support requested special purpose register -- `mrs r3,CPSR'... )
でようやくOK
5.デバッグ用にLOGのLCD出力
FreeRTOSの関数 xTaskCreate() 正常に実行される。
〃 vTaskStartScheduler() ほどほどに動作。
・タイマー0の割り込みで実行される関数を portISR.c (ARMモードでコンパイル)から自作関数(thumbモードでコンパイル)に置き換えると、VICVectAddr4に設定されるアドレスが1バイトずれる。> 仕方なく、portISR.c にコードを書き込む。(原因不明)
・このタイマー割り込み関数は、最初の割り込み時に実行される。しかし、それ以降の割り込みは確認出来ず。
6.泥沼。
1)thumbモードをARMモードにしたり、thumbモードに戻したり。(Makefileをいろいろイジル)
2)etc.
7.現時点でのLPC2388の壁
1)割り込み関連の扱い VICVectAddrX, VICVectCntrlX,,,etc.
2)命令系がARMモードとThumbモードの2ある事。
参考にするサンプルコード(プロジェクト)が両方使っているケースが多い。
3)startup.s , boot.s 等のスタートアップ用のアセンブラコードが難解。
4)リンクスクリプトファイルも難解。
5)とにかくタイマー0の割り込みが安定的に動かない。。。。。
6)GNU GCC の地雷 >> 単に変数を追加するだけで動作が異なる。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿