組み込みシステム設計者のためのLIN2.0マイコン実装術(後編) ――スレーブ・ノード用ドライバ・ソフトウェア開発のポイント
● 保護IDは処理時間に注意
ブレークと同期バイトを正常に処理できれば,後は基本的に普通のUART通信を行うだけです.保護IDも単に1バイト受信するだけ(のはず...)ですが,ちょっとした注意が必要です.
保護IDには,パリティ情報が付加されているため,これをチェックする必要があります.受信の場合,次に来るデータ・バイトをUARTが受信している間に保護IDの処理を行えばよいのですが,送信の場合はレスポンス・スペースの大きさに影響を与えてしまいます(図12).
おおまかに言えば,保護ID処理から0.5ビット時間を引いた値がレスポンス・スペースとなります.マイコンが高速で,この値が負になる場合,時間待ち処理を入れる必要があります(図5の「送信レスポンス・スペース」状態).
リスト5(a)は,パリティ・チェック処理をコンパイラに依存しない範囲で,C言語で記述した例です.C言語はもともとビット演算に弱いこともあり,コード効率の問題も相まって,意外とかさばる処理となってしまいます.このような場合,一部をアセンブリ言語で実装すると効果的です.リスト5(b)はその例です.今回の環境では,元のCソースと比べて,コード・サイズは1/4に,処理時間は1/5になりました.
図12 保護ID処理
送信時,この処理に手間取ると,レスポンス・スペースが大きくなってしまう.
リスト5 チェックサム計算処理
(a)C言語による記述
(b)アセンブリ言語による記述