FreeRTOS on LPC1768 mbed Cloud IDE (Not yet finish)

IMAGE11.GIF - 980BYTES 目標と方針
IMAGE11.GIF - 980BYTES プログラム変更のポイント
IMAGE11.GIF - 980BYTES プログラム構成
IMAGE11.GIF - 980BYTES 動作例
IMAGE11.GIF - 980BYTES 未確認と今後の計画
IMAGE12.GIF - 2,801BYTES


変更履歴
2010年11月13日 新規作成開始しかし未完
2011年1月1日 未完のまま公開



Webのmbed Cloud IDE上で開発している様子
port_asm_mbed.sが新規に作成したファイルで、今回の開発のキーとなる部分
並行してLPCXpresso上で同じファイル構成で開発を実施。既にこの環境でmbedのハードウェア上でシステムが動作していることが確認が出来ている
唯一、ファイル構成で違うのは、port_asm.c(LPCXpresso IDE)port_asm_mbed.s(mbed Cloud IDE)の1つだけ
port_asm_mbed.sは、port_asm.cからアセンブラソースコードを生成し、ハンドで修正して使用している





目標と方針
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

<注意>

現時点(2011年1月1日)では、目標に何ら達していません。
未だ、判らないことだらけですか、経緯を公開します。



<目標>


<方針>

現在、mbedのハードウェア上でFreeRTOSを動作させてデータロガーのアプリケーションを開発し、かなりの部分が動作しています。
この開発は、

  1. LPCXpresso IDE
  2. Eclipse GCC IDE


の二つの開発環境で開発ができる状況になっています。

しかし、上記の開発環境とmbed Cloud IDEの違いは、下記のような差があります。

開発環境 コンパイラ . ..C++... .....C..... assembler embedded asm inline asm コメント
mbed Cloud IDE RealView OK OK OK? OK NO mbedのスタッフであるSimon氏が、インラインアセンブラが
使えないことを、ここのコメント欄で述べています。
同様に、アセンブラでの記述も推奨していません。
LPCXpresso IDE Sourcery G++ Lite ARM EABI NO OK OK ? OK .
Eclipse GCC IDE OK OK OK ? OK .

インラインアセンブラが使えないことが、かなり致命的です。
何故使えないのでしょうか?
ここに、mbedのサポートメンバーの一人、Simon氏がコメントしています。

と言っているように思えます(意訳でなく私の受けた印象です)。
"embedded assembler"と純粋なアセンブラソースファイルのどちらが良いかは判りませんが、少なくても純粋なアセンブラの使用は推奨していません。
しかし、実際には使用することは出来ます。
従って、開発方針を下記のように決めました。











プログラム変更とそのトライアル
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

<トライアル結果>

方針に基づき10月中旬より開発を始めましたが、その後が大変でした。
具体的には、下記の様な開発のステップを踏みました。

  1. エラーが発生することは承知の上で、mbed Cloud IDEでコンパイルを実行
  2. エラー原因がインラインアセンブラに起因するファイルを探し出す
    探した結果は、①port.c ②queue.c ③task.c ④portmacro.hのファイルが変更の必要なファイルと判明
    ④はヘッダーファイルだが#defineでアセンブラコードが埋め込まれている為
  3. port.cのファイルは明らかにアセンブラコードの埋め込みが多いので、
    このファイルを①port.c(アセンブラコードなしのFunction)と②port_asm.c(アセンブラコードが埋め込まれたFunction)に分ける
  4. 分けたport_asm.c内に、2項②③④のそれぞれのファイル内からもアッセンブラコードがある部分を移動させる
  5. エラー解消の為、Cソースコードを修正(実は、RealView(mbed IDE)のコンパイラが厳格で修正した部分が多くあり)
  6. 3項で作成した②のファイルをコンパイルしてアセンブラソースファイルを吐き出させて、port_asm_mbed.sのファイル名とする
  7. このファイルはGCCベースのアセンブラソースファイルで、残念がらRealView(mbed IDE)でアセンブルするとエラーが多発する
    仕方ないので、ソースファイルをハンドで修正する
  8. コンパイル及びアセンブルがそれぞれ成功すると、IDEがリンク動作に入るがここでもエラーが多発し、その都度、原因が内在するソースファイルを修正する
  9. 全てが上手くいくとbinファイルがダウンロードされるので、それをmbedに格納して動作させる
    が、うまく動作しなかった(2010年11月7日)
  10. 残念ながら11月、12月は飲み会が多くて開発に集中できず、年末までに動作させることが出来ませんでした(2011年1月1日時点)

動作達成の為には問題点を明確にしないといけません。
動作しない要因を下記のように分析しました。

No. 要因 想定される問題点 進捗状況
1 割込み処理関連 割込みベクターへの登録が上手く出来ていない
もしくは割込みルーチンが動作しない
これからの作業
2 Cの関数とasmのルーチン間での引数渡し GCCでアセンブラソースファイルを作成したものをひな型にしているが
実際の引数受け渡しはRealView側で行われる
コンパイラ違いによる引数渡しの不整合
これからの作業
3 asmルーチン内のBug アセンブラソースの修正ミス これからの作業
4 Start-upルーチンの違い mbedがどのようにシステムを立ち上げているのかが、一切不明 これからの作業
5 上記以外の要因 思いついたら追加します .
6 1から4の要因の組み合わせ 考えられる部分を一つ一つ修正していくしかないでしょう .


<トライアルの内容 / Trial result>

現時点でのソースファイルを公開します。どなたかアドバイスいただけると幸いです。
I saved following files for getting your advice. Thanks.

開発環境
IDE Environment
ソースファイル(ZIP)
Zipped Source file
動作状況
Current status
LPCXpresso IDE mbed_IDE_FreeRTOS_wrk2.zip

RTOS_lpc1768.bin
LEDの順次点灯を確認可能
解凍後に、RTOS_lpc1768.binをmbedにロードすれば、動作が確認可能
If you download RTOS_lpc1768.bin file into mbed board, you can see
LED on/off with under controled by FreeRTOS.
mbed Cloud IDE FreeRTOS_on_mbed_v1.zip 動作せず!
Does NOT work until today













プログラム構成
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES













動作例
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES









未確認と今後の課題
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES