3

USB データを送信する優先度の高い割り込みが 1 つと、次に送信するデータを既にフェッチしている優先度の低いタスクが 1 つあります。

優先度の高い割り込みで、まだフェッチ中のデータが必要になる場合があります。その場合、優先度の高い割り込みで実行を続行する前に、優先度の低いタスクを終了するように MCU に指示する必要があります。

これを機能させる方法がわかりません。NVIC_SetPriority を使用してバックグラウンド タスクの優先度を上げ、すぐに USB タスクから NVIC_SetPendingIRQ を呼び出し、その後再度下げることはできますか? または、これを機能させる最も簡単な方法は何でしょうか?

4

2 に答える 2

0

RX と TX を 2 つの異なるコンテキストで実行する正当な理由があるかどうかはわかりませんが、通常、これは 1 つのコンテキストでのみ非常に簡単に実装できます。ただし、元の設計に本当に従いたい場合は、これら 2 つのコンテキストの操作を同期させる何らかのメカニズムを導入する必要があります。通常、RTOS を実行している場合は、イベント フラグ、バイナリ セマフォ、または特定の RTOS によって提供される他の同様のサービスを使用します。

データを受信する前にデータを送信したくない (そして送信できない) ことはありませんか? そのため、データを受信した後に RX コンテキストから設定される (TX コンテキストでの) 通知を待つ必要があります。

この手法を使用せずにこの種のトンネリングを行うと、すぐに同期が取れなくなります。

于 2014-02-13T11:51:07.377 に答える