C7x:CPU NLC モジュールは、割り込み時に状態をクリアしません
詳細:
データ破損は、次の場合に発生します。
- タスクの切り替えを含むアプリケーションを実行した場合。この場合、NLC を使用するタスクは少なくとも 2 つあります。
- タスク A に割り込みが発生すると、その後に TICK が発生する NLCINIT が発行されます。この動作により、NLC モジュール内に何らかの内部状態が設定され、計算された転送ケースがフラッシュされるため、次の TICK で ILCNT_INIT 値を ILCNT に再ロードする必要があることが示されます。割り込みが発生しても、この状態は正しくクリアされません。
- ISR は、NLC コードも実行されているタスク B へのタスク切り替えを実行します。返される NLC コードは進行中であり、元のタスクの NLC ループとは異なる ILCNT_INIT 値を持つ必要があります。
- ISR から復帰した後、次の TICK では、破損した状態が原因で、ILCNT を間違った値 (ILCNT_INIT-2) に設定し始めます。
この時点で ILCNT が破損し、NLC ループが誤った反復回数を実行するため、データが破損する可能性があります。
回避方法:
コンテキストの保存の一環として ISR で NLCINIT (パラメータは関係なく、後から TICK's/BNL も必要ありません) を発行します。回避方法による性能への影響はありません。