平成30年 春期 エンベデッドシステムスペシャリスト 午前II 問1

メモリマップドI/OのI/OポートにアクセスするプログラムをC言語で記述するときの注意点として、適切なものはどれか。

 ア  アセンブラのIN/OUT命令を用いたアクセス用関数を呼び出して、アクセスする。
 イ  コンパイラによる最適化を抑止するため、volatile型修飾子を付けて宣言した変数へのポインタとしてアドレスを指定し、アクセスする。
 ウ  他の関数からアクセスされるのを防ぐために、静的広域変数として宣言してアクセスする。
 エ  ポインタではアクセスできないので、配列として実体を宣言してアクセスする。


答え イ


解説
メモリマップドI/OのI/OポートにアクセスするプログラムをC言語で記述する場合、コンパイラによる最適化を抑止するため、volatile型修飾子を付けて宣言した変数へのポインタとしてアドレスを指定し、アクセスする(イ)必要があります。
volatile型修飾子を付けないと、変数がレジスタに割り当てられ、I/Oポートに期待するようにアクセスできません。


キーワード
・volatile型修飾子

キーワードの解説
  • volatile型修飾子
    C言語で変数の宣言時にvolatile型修飾子を付けると、その値が必要になるたびに、メモリから読み取られ、値が変更されるたびにメモリに書き戻されます。

もっと、「volatile型修飾子」について調べてみよう。

戻る 一覧へ 次へ