組み込みシステム設計者のためのLIN2.0マイコン実装術(後編) ――スレーブ・ノード用ドライバ・ソフトウェア開発のポイント
図14は,その対策例です.メッセージ・バッファは仕様上最大16個持てることになっていますが,それに加えて一時バッファ(図中,バッファ番号がTとなっている箇所)を設置します.APIからメッセージ・バッファにデータを書き込む場合,最初にいったん一時バッファに書き込みます.このとき,LINドライバ側から,APIが書き込んでいるのと同じ番号のメッセージをアクセスにきても,図13のようなデータ混在問題は発生しません.APIからの書き込みが完了した時点で,メッセージ・バッファの番号を該当するものと入れ替えます.番号を入れ替える間は,割り込み禁止にするなど,LINドライバ側からのアクセスを禁止しておく必要があります.
図14 バッファ制御の例
一時バッファを追加することで競合を回避する.バッファ番号の入れ替え時は,割り込み禁止などの処理が必要.