組み込みOS自作入門勉強会(3)

今日は2章を読んだ。制御を行うICチップをコントローラと呼ぶ。コントローラの制御はレジスタ経由で行う。たとえば、シリアルコントローラならばコントローラの持つ特定のレジスタに1byte書き込むと、コントローラ側でその1byteをシリアル通信してくれるなど。コントローラもメモリと同様にアドレス線をもっている。コントローラのレジスタアドレス空間上に存在させ、そのアドレスを読み書きすることでレジスタ操作をすることをメモリマップドI/Oと呼ぶ。組み込みだとvolatileが重要。たとえば以下のコード。

reg1 = 0x01;
reg1 = 0x02;
reg2 = 0x04;

最適化を抑制しないと、reg1 = 0x01;の書き込みは省略される。また、reg1 と reg2 の順番が逆に実行される可能性もある(パイプライン操作の関係で)。メモリ操作であれば、問題はないがレジスタ操作の場合は問題がおこる。コンパイラ側はメモリを操作しているのか、レジスタを操作しているのか理解できないのでvolatileキーワードで明示する。

この章のメインの話はメモリマップドI/Oかな。メモリ操作でレジスタ触れるよーというのがメインで、後はそれを利用した値の設定などなど。