(toppers-users 3342) Re: TOPPERS/ASPをLPC1343チップに移植していますが、難儀しています。

suikan suikan7 @ yahoo.co.jp
2010年 12月 24日 (金) 22:14:42 JST


 こんにちは酔漢と申します

LPC1000シリーズに関しては、LPC1768への移植例をSourceforgeで公開していま
す。また、その移植過程についても私の Blogで公開しています。

http://sourceforge.jp/projects/toppersasp4lpc/
http://d.hatena.ne.jp/suikan+embedded/searchdiary?word=*[TOPPERS/ASP]

野良カーネルに抵抗がないのならば、見ていただくのも手かと思います。チップ
依存部をターゲット依存部から切り離しているほか、Doxygenド キュメントも用
意しているため、LPC1768からLPCからLPC1343への移植は楽なはずです。

また、こちらで議論されていることもカバーしています。

酔漢

(2010/12/14 14:40), koizumi yoshiyuki wrote:
>  こいさんです。
>
>  小生、LPC1343チップにTOPPERS/ASPを移植しています。sample1のmain_task動作中にusageフォルトが発生しています。
> 移植の誤りの可能性もありますがディスパッチャ周りの動きが理解出来ず難儀しています。 何かヒントが頂ければ幸いです。
>  当初メモリ不足でだましだましデバッグしていましたが、istack問題でこちらは解決です。
>
>> targetの修正部はtarget_serial.cとtarget_config.cで後はincludeファイル名変更程度です。(cq_starmを使わないようした為)
>  非依存部やアセンブラ部には手を入れていません。
>
> 現象
>> logtask_mainのsyslog_1を表示中(UART割り込みで出力継続)にmain_taskが動作しsyslogで出力します、がdoのループまで到達しないうちにusageフォルトになる。
>
>> main_taskはsyslog_1の出力が完了し、時間に計測処理を行っています。計測処理中にタイマ割り込みでlogtaskのdly_tsk(LOGTASK_INTERVAL)が解除されます。logtaskの優先度が高いのでmain_taskは待ちになります。
>
>> LPC1343のUARTはFIFIOが8段あります。logtask中に2byte出力して、UARTの割り込みが解除になり、残り6byteは割り込み処理でUARTにデータを詰め込みます。この時はまだlogtaskが動作しています。其の後、logtaskはdly_tskで待ちになります。
>
> 4 logtaskはdly_tskで待ちになったので、2で待たされたmain_taskに起動がかかりますが、このときusageフォルトが発生します。
>
>> 2の時、タイマ割り込みを禁止にして、logtaskのメッセージ表示が終わった後、タイマ割り込みを有効にするとusageフォルトは発生せず、logtask_mainのメッセージは表示されます。(処理を単純にするため、テストタスクは起動していません。テストタスクのメッセージがどうなるのかは未確認)
>
> 6 UARTの出力時にブレークポイント設定してもusageフォルトは発生しません。正常に動作します。
>  ブレークポイントを設定すると条件が変わってしまい、発生しなくなるため現象の把握に苦労しています。
>  何かタイミング絡んでします。となると、UARTドライバの作りかも知れませんが、UARTドライバの戻りでフォルトが出ているわけではないようです。
>
> ★ ディスパッチャ周りで変だと思われる流れを見つけました。
> 3のlogtaskはdly_tskの後をデバッガを使ってシングルステップで追いました。main_taskのスタックポインタが4byteずれているのではないか思っています。
>
> 1 signal_timeで(*(p_tmevtb->callback))(p_tmevtb->arg);によりlogtaskがreadyになる
> 2 signal_time関数を終了するとret_int:に戻り
> 3 EXC_RETURN_PSPなのでret_int_1:に飛ぶ
> 4 ”trueならret_int_3へ”でret_int_3:へ飛ぶ
> 5 ”Threadモードへ移行”でret_int_4:へ飛ぶ
> 6 残りのレジスタを保存のときのスタックポインタが本来の値より-4されていると思っています。
>
>  割り込み時に8byteスタックに積み、4byteは捨てているが、4byte残ったままになっているのだと思います。
> どこかでPSPを-4すればよいのでしょうが、何処で行えばよいのか分かりません。適当にPSP-4のルーチンを入れてみましたが別な処でトラップが発生しました。
>
> ★ ブレークポイントを設定しデバッグを行っているので、この動きが正しいのかは分かっていません。
>
> ■ 分かりにくい説明で済みませんが、この辺り解る方が居られましたら、サポートをお願いします。
>  一週間ほど費やしました、この間istackの設定誤り(?)を見つけ解決かと思いきや、システムは相変わらすフォールトで、私はハングアップ状態です。
>
>  追伸
>  既にLPC13xx系にTOPPERS/ASPを移植された方は居られませんでしょうか。
>
>  以上


-- 
酔漢
Blackfin 空挺団           http://blackfin.s36.coreserver.jp/
TOPPERS/JSP for Blackfin  http://sourceforge.jp/projects/toppersjsp4bf/
Blog                      http://blackfin.g.hatena.ne.jp/suikan/

--------------------------------------
Get the new Internet Explorer 8 optimized for Yahoo! JAPAN
http://pr.mail.yahoo.co.jp/ie8/