5

私は組み込みシステム (Cortex M0) のコードを書いていますが、ミューテックス/スピンロックなどのすべての贅沢を持っているわけではありません。Main() ループからディスクにフラッシュされる共有バッファ (ログ ファイル) にデータを追加する簡単な方法はありますか?

単一のプロデューサー (1 つの割り込み) と単一のコンシューマー (メインループ) しかない場合、プロデューサーが「ヘッド」を増やし、コンシューマーが「テール」を増やす単純なバッファーを使用できます。そして、それは完全に安全になります。しかし、複数のプロデューサー (割り込み) があるので、行き詰まっているようです。

各割り込みに独自のバッファーを与え、それらを Main() で結合することもできますが、これには多くの余分な RAM と複雑さが必要になります。

4

1 に答える 1

5

これは、アクセス中にハードウェア割り込みソースをオフにする単純なリング バッファー(円形配列) を介して実装できます。関数 init、add、および remove のみが必要です。

特定の MCU が割り込みをどのように処理するかはわかりませんが、特定のハードウェア周辺機器の割り込みのみを有効/無効にする限り、保留中のままになる可能性が高くなります。アプリケーションの性質によっては、グローバル割り込みマスクを無効にすることもできますが、それはかなり大雑把です。

一般に、割り込みを見逃すことを心配する必要はありません。着信割り込みを処理するコードが割り込み頻度よりも遅い場合、それを修正するソフトウェアは世界中にないためです。このようなシナリオを回避するには、データの損失を受け入れるか、CPU クロックを増やす必要があります。しかし、もちろん、常に ISR 内のコードをできるだけコンパクトに保つ​​ように努める必要があります。

于 2013-01-21T14:13:38.467 に答える