レジスタをたたくって何
以前、組み込みシステム開発(とある製品のファームウェア開発)の現場で作業をすることになり、チームリーダーの方から通常のアプリケーション開発と組み込みシステム開発の違いを一言でいえば・・というような話をオリエンテーションでされたことがあります。
最大の違いはレジスタを扱うかどうかだ、ということでした。
レジスタというと、組み込みなどハード関係のことに詳しくない方はCPU内の一時記憶場所、というようなイメージしかないかもしれません。私もそうでした。
しかし、組み込みの世界でレジスタといえば、
http://itroner.blog41.fc2.com/blog-entry-3.html
『組み込み機器では、いわゆるCPUだけではなく周辺機器(シリアルポートやLANポートとか)を制御する機能や特殊な演算(音声圧縮とか映像デコードと か)をする機能などを1チップ内に集積しています。これらをCPUから使用するために、各機能と入出力をおこなう領域を物理メモリ上に配置しています。こ の領域がレジスタです。』
出典「大なり小なり 組み込みで遊んでみるブログ http://itroner.blog41.fc2.com/」
といようなものです。
単純に、かつ、おおざっぱに云えば、レジスタの値を読んだり、値を書き込んだりするのが組み込みの中心的な処理といっていいかもしれません。
ハードウェアの仕様はきまっていて(仕様書があり)、この機能はレジスタのこのアドレス上の値を操作すると動かすことができる、ということになっています。
レジスタの値を読み書きすることで、その機能を使用したり、ステータス(状態)をしることができます。
例として挙げます(愚にもつかないようなコードですが)。
*((uint32_t *)0x00000002) = 0x00000001;
この処理は、レジスタの0x00000002番地に0x00000001という値を書き込む、という処理です。uint32_tというのは32ビット長の無符号整数宣言です。
とある機能のレジスタ(ここでは0x00000002番地)上に決められた値を書き込むことで(ここでは0x00000001)その機能を使用することができるようになります。