まず、なぜデータを送信するために、円形のキューを使用する必要がありますか?それを解決するために、何が問題なのです!
このセクションでは、データの割り込み伝送を使用する方法を言いますが、あなたはこの中断がバグを送信したことを考えた場合、以下を見て
彼は返信しませんでした見たかっただろう
qwertyuioaqwertyuioa返信がqqwertyuioaです
送信はもはやメインループによって占有されているので、次の命令がすぐに送信されます!そして、抹消最初に置くので、実際にバグは、明らかではありません
アイデアは、今私はキャッシュに保持され、データを書き込み、シリアルポートの送信は常にキャッシュから取り出し、その後、送り出さ中断し、キャッシュが必要です!
循環キューを直接使用することは良い選択です。
私はリングキューに書き込まれたデータを送信し、その後、シリアルポートの送信割り込みを開きます
それが学生に送信された場合に、円形のキュー内のデータの数を決定し、シリアルポートの送信割り込みは、0より大きいではありません!
第二に、いくつかの変数を定義します
リングにキューを管理するための変数の第三に、その配列
第四に、シリアルポートが割り込みを送信しています
第五に、キューの機能をリングを変更し、データが完全にオープン休憩を満たしています
第六に、今テスト
今、データが失われることはありません!
注意:たとえないメインループにおける循環キューの使用
循環キューバッファが限られている!まあ限り、ボー・レートが設定されているように、データのビット毎の割り込み送信時間は確かに時間を必要とするデータを送信する特定のです!
今、死亡の直接の原因です、
実際には、クラッシュの原因は、循環キュー内のprintf関数の使用によるものです
printf関数は、紛争が生じ、送信を中断しません
それを変更します