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

メモリマップドI/Oはvolatile付きポインタで最適化を抑止する

エンベデッドシステムスペシャリスト試験2020年度 10月試験 午前II1/開発 / コーディング規約

選択肢

正解と解説

正解: コンパイラによる最適化を抑止するために、volatile型修飾子を付けて宣言した変数へのポインタとしてアドレスを指定して、アクセスする。

メモリマップドI/Oでは、I/Oレジスタが主記憶と同じアドレス空間に割り付けられ、通常のメモリアクセスと同じ手段で読み書きする。ただしI/Oレジスタの値はハードウェア側が勝手に書き換えるため、コンパイラが「値は変わらない」と判断してアクセスを削除したり順序を入れ替えたりすると正しく動作しない。そこでvolatile型修飾子を付けたポインタ経由でアクセスし、最適化による読み書きの省略・並べ替えを抑止するのが定石である。

選択肢ごとの解説

出典:令和2年度 10月試験 エンベデッドシステムスペシャリスト試験 午前II 問1(IPA)

この問題は2回出題されています

同じ分野の他の問題

最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。