送信データキューのシリアルループを見て追加されました

 

 まず、なぜデータを送信するために、円形のキューを使用する必要がありますか?それを解決するために、何が問題なのです!

 

 

 

このセクションでは、データの割り込み伝送を使用する方法を言いますが、あなたはこの中断がバグを送信したことを考えた場合、以下を見て

 

 

 

 

彼は返信しませんでした見たかっただろう

qwertyuioaqwertyuioa返信がqqwertyuioaです

 

送信はもはやメインループによって占有されているので、次の命令がすぐに送信されます!そして、抹消最初に置くので、実際にバグは、明らかではありません

 

 

アイデアは、今私はキャッシュに保持され、データを書き込み、シリアルポートの送信は常にキャッシュから取り出し、その後、送り出さ中断し、キャッシュが必要です!

循環キューを直接使用することは良い選択です。

私はリングキューに書き込まれたデータを送信し、その後、シリアルポートの送信割り込みを開きます

それが学生に送信された場合に、円形のキュー内のデータの数を決定し、シリアルポートの送信割り込みは、0より大きいではありません!

 

第二に、いくつかの変数を定義します

 

 

 

 

 

 

 

 

リングにキューを管理するための変数の第三に、その配列

 

 

第四に、シリアルポートが割り込みを送信しています

 

第五に、キューの機能をリングを変更し、データが完全にオープン休憩を満たしています

 

 

第六に、今テスト

 

 

 

 

 

今、データが失われることはありません!

 

注意:たとえないメインループにおける循環キューの使用

 

 

 

 循環キューバッファが限られている!まあ限り、ボー・レートが設定されているように、データのビット毎の割り込み送信時間は確かに時間を必要とするデータを送信する特定のです!

今、死亡の直接の原因です、

 

 

実際には、クラッシュの原因は、循環キュー内のprintf関数の使用によるものです

 

 printf関数は、紛争が生じ、送信を中断しません

 

 

それを変更します

 

 

 

 

おすすめ

転載: www.cnblogs.com/yangfengwu/p/11671297.html