私は組み込みシステム(Cortex M0)用のコードを書いていますが、mutexes/spinlocks/etcのすべての贅沢を持っているわけではありません。私のMain()ループからディスクにフラッシュされる共有バッファ(ログファイル)にデータを追加する簡単な方法はありますか?割り込み保護されたバッファ
単一のプロデューサ(1つの割り込み)と単一のコンシューマ(メインループ)がある場合は、プロデューサが「ヘッド」を増加させ、消費者を「テール」とする単純なバッファを使用できます。そしてそれは完全に安全です。しかし、今私は複数のプロデューサー(割り込み)を持っているので、私は固まっているようです。
私は各割り込みに独自のバッファを与え、Main()でそれらを組み合わせることができますが、これには余分なRAMと複雑さが必要です。
リンク先のランタイムライブラリはありますか?たぶんそれは "原子"関数を含んでいますか?または、そのような関数/ライブラリがない場合、CPUはアトミックに値を比較し、増減する命令を持っていますか?これらはセマフォやmutexの独自の実装に使用できます。 –
@JoachimPileborgこれはNXP LPC11U35 CPUであり、RedLibライブラリとリンクしています。これは私が知っている限り原子的機能を提供していません。 – Muis
私はこのシステムの割り込み構造に精通していません。しかし、同じ優先順位のあなたの割り込みですか?いずれにしても、バッファ用にスタックを使うことができるようです。または、このソリューションでスタックオーバーフローの問題を見越してもらえますか? –