通信系のバグ:今でもあるエンディアン問題

 ソフトウェア技術者のためのバグ百科事典(19)複雑怪奇な通信系プログラムのバグは、通信系の組み込みの開発者が大なり小なり経験しているだろう。特にエンディアンの問題は、よくある話である。この記事では解説されていなかったが、エンディアンの問題の発生の原因の1つに、通信のエンディアンとマイコンのエンディアンが異なることがある。
 歴史的に、通信の世界では、ビッグエンディアンを使うことが多い(当然、例外はあるが)。一方、マイコンの世界では、リトルエンディアンが多い(設定で選べるマイコンもあるが)。これが間違いのもとである。
 もう1つやっかいなのが、物理的な通信路でシリアル出力されている場合、ビットの上位から送信されるか、下位から送信されるかという2択があるということである。MSBファーストかLSBファーストかという問題だ。これも、どちらの流儀もある。LSBファーストの場合が多いが、よく使われるI2CはMSBファーストだ。
 これだけ選択肢があると、まあ、いろいろと間違うこともある。

コメントを残す

メールアドレスが公開されることはありません。