ikkei blog

電子工作やパズルのブログです。主にLEDを使った電子工作をやっています。

ボタンをチョンチョンするとフリーズすると思ったら...

2013年06月22日 14時25分32秒 | 組み込みソフト
今やっていることで、タイミング良くボタンをチョンチョンと押すと
反応が無くなって、キースキャンも止まってしまいます。

これは、きっとコマンドキューの大きさが足りないためだろうと
キューのサイズを大きくしてみましたが、変わりません。
キューが溢れそうになったらポートに信号が出るようにしてみました。

ところが、いくらやっても全然出てきません。
ならば、もっと小さくしてみよう。
どこまで小さくすれば、出てくるか。
どんどん小さくして、2までしたら、やっと出てきました。

4に増やして連打してみましたが、今度は全く出力が出ません。
手が追いつかないのです。高橋名人でないと無理かも。
と言うことは、これが原因ではないということ。

他の原因を探るため、色々信号を見ていくと....
あれ?

ボタンを押すと、シリアル出力が出るのですが、
ハンドシェイクしているので、RTS、CTSを使用しています。

/RTSがLの時は出力してはいけないのですが、どうやら/RTSがLの時にフリーズするようです。
でも、よくよく見てみるとそのタイミングで/CTSがLになっています。
両方ともLになるのは、あり得ないのです。ダメじゃん。

原因は、/CTS出力と/RTSチェックを別の関数でやってました。
そのせいで順序が逆なのに気が付かなかったというものです。

出力のビジー代わりにも/CTSを作っているので、
シリアル出力するとき、/CTSのチェックのあと、/CTSを出力します。

ところが、/RTSのチェックをそのあとにやっていたのです。
これは、出力しようとして受信を拒否しながら相手の送信が終わるのを待つってことです。 こりゃダメだ。

と言うことで、
/CTSをチェックしてから、/RTSをチェックして、送信出来るとなってから、
/CTSを出してシリアル出力するという手順に修正しました。

これで、フリーズすることは無くなりました。ヤレヤレ。


最新の画像もっと見る

コメントを投稿