[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00850] ファイルアクセスとシリアル割り込みが重なるとシステム破壊



WonderWitchバグ?

このところGPSからNMEAセンテンスを受け取って位置情報を記録するNMEAロガーが
なかなかうまく行かず困っていたのですがやっと原因を突き止めました。 

WonderWitchには特定のファイルアクセス系の関数を呼び出しているときに割り込みが 
かかるとセグメントが正しく設定されない/もしくは復帰されないかメモリーマップが 
異なるかするらしく、受信データを正しい領域に書き込めないという問題があるようで 
す。当然、データを失うだけでなく運が悪いと書き込んだデータがシステム領域を破壊 
して暴走やカートリッジ初期化を招きます。 

割り込み処理ルーチンを工夫する事で回避したつもりだったのですが完全ではなかった 
ようです。 

そもそもNMEA以外の他のloggerシリーズは1秒毎に受信-処理-書き込み-アイドルの繰り
替えしなの でファイルアクセスと受信が重なること自体、通常はありません。 

NMEAだけはそうは行きません。 

送られてくるデータのタイミングと割り込みルーチンの書き方によってはものの数秒で発 
生するのですが運悪く、発生頻度がごく低い割り込みルーチンになっていたためここ何日 
か朝起きると飛んでいるという有様で難渋していたのですが苦し紛れに他の人の割り込み
ルーチンを持ってきたところ一分と持たなくなったので突き止められました。^-^; 

本来はquteに直して貰うか割り込みルーチンの書き方を明示して貰うべきなのですが応急
処置としてCR,LFの期間に通信ポートを閉じて書き込み、通信ポートを再度開けるという
とっても美しくない処理を入れました。 
NMEAの場合、CR+LFが必須ですがチェックサムがあればそれで行末が確認できるのでとりこ
ぼしても問題ないコードが書けます。幸い、ファイルアクセスはこの間に確実に終わるとい
うことでなんとか動いています。やれやれ。 

ひょっとするとIL呼び出し全般にこの問題があるのかも..

GPS TRACK LOGGER for WonderWitch
http://homepage1.nifty.com/gigo/wonderwitch/logger.html
ソースもあります。

WonderSwanでGPSのTrack Logを保存する
http://www.valley.ne.jp/~kazuo/gps/test_index/gar2ws/gar2ws.htm

GPS と wonder swan
http://www.af.wakwak.com/~haru/gpsws.htmhttp://www.af.wakwak.com/~haru/gpsws.htm

ワンダースワンでフライト記録
http://www.pluto.dti.ne.jp/~suzuki-y/tsukiai/tsuki08.html

ワンダースワンでGPS まもなく配布開始します 
http://www.yamatabi.net/main/a_mibbs.cgi?mode=point&fol=a_2&tn=0041&rs=02&re=02&rf=no&al=on


ML Archives