メモリマップドI/OのI/OポートにアクセスするプログラムをC言語で記述するときの注意点として、適切なものはどれか。
ア | アセンブラのIN/OUT命令を用いたアクセス用関数を呼び出して、アクセスする。 |
イ | コンパイラによる最適化を抑止するため、volatile型修飾子を付けて宣言した変数へのポインタとしてアドレスを指定し、アクセスする。 |
ウ | 他の関数からアクセスされるのを防ぐために、静的広域変数として宣言してアクセスする。 |
エ | ポインタではアクセスできないので、配列として実体を宣言してアクセスする。 |
答え イ
【解説】
メモリマップドI/OのI/OポートにアクセスするプログラムをC言語で記述する場合、コンパイラによる最適化を抑止するため、volatile型修飾子を付けて宣言した変数へのポインタとしてアドレスを指定し、アクセスする(イ)必要があります。
volatile型修飾子を付けないと、変数がレジスタに割り当てられ、I/Oポートに期待するようにアクセスできません。
【キーワード】
・volatile型修飾子