2014年12月11日(木) 21:32
基本機能が一通り動作確認できたので、細部を煮詰める。
まずは、割り込みを整理。割り込みには優先順位がある。どれを優先するか考えねばならない。ひとまず、以下の順番で優先する。
1)外部割込み
ラジコン受信機のパルスを読むのが目的。
割り込みが発生しないと読み損ねるので、最優先。
2)PWM出力
モーターアンプの制御パルスを出す。
致命的に重要だが、割り込みが発生しなくてもPWMは出力されるので慌てない。
3)SDカード
書き込み不良があると、まずいだろう。
4)タイムアウト用
1ミリ秒単位のカウントアップ。
タイムアウト確認や時間待ち。
たまにであればカウントアップが欠落しても致命的ではない用途に使うので、優先度が低くても可。
5)RTC
SDカードに作成するファイルのタイムスタンプぐらいしか用途がない。
無くても本筋に無関係なので、最低優先度。
1)は非常に分かり易い。割り込みでタイマーを読んでパルス幅を調べているのだから、割り込みが発生しないと致命的である。また、割り込みタイミングがズレれば結果が狂う。
しかし、良く分からない割り込みの方が多い。
2)は割り込みを禁止すると、PWM出力されなくなる。では、PWMに応じて割り込みが発生するのか?割り込み発生がズレたら、PWM波形が狂うのか?
PWM波形の出力は比較器を使っているだけで、素直に考えれば割り込みがズレても大丈夫である。しかしハード屋の理屈は異なるかもしれない。仮にPWM波形に影響すると重大なので、割り込み優先度は2番目に高くした。
3)も一部不明。割り込みが脱落すると書き込みデーターが消えるのか?
さすがにそれは無しで、割り込みハンドラーでの処理を見ると、書き込み完了の認識が遅延するだけのようだ。
分からないなりに優先順位付けは難航しなかったので、宿題の1つに進む。
SDカードの物理的不良により、SDアクセスが無限ループ(反応無し状態が延々続く)することはないのか?
仕方なく、SD書き込みルーチンの内部を漁る。その複雑さにはうんざりだ。これほど魑魅魍魎な中身を見たのは、USBアクセスルーチン以来である。
written by higashino [マルチローター] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4