どのセクションに定数揮発性変数がcに格納されていますか?マイクロコントローラーでは、そのような種類の変数をRAMに配置する必要があります。右?
5 に答える
Volatile
変数が格納されている場所とは関係ありません。コンパイラがその変数に対して実行する可能性のある最適化を回避するために、毎回メモリから変数を読み取るようにコンパイラに指示するだけです。
ローカル変数と関数フレーム-スタック
初期化されていない場合のグローバル変数と静的変数-.bssブロックはシンボルで始まります
初期化されている場合のグローバル変数と静的変数-データセグメント
環境変数と引数-スタックの最上位
動的データ割り当て-ヒープ
Const-ROM
揮発性-ストレージなし
レジスタ-CPUレジスタ
Constvolatile-conststorageと同じ場所にあります
変数は、Cプログラムが法的に変更できないことを意味しますが、他のconst volatile
何かは変更できます。この変数をRAMに配置するのは論理的ですが、(リンカースクリプトまたは同様のオプションを介して)ROMに配置するように指示しても、コンパイラは文句を言いません。この変数を、読み取り専用タイマーカウンターレジスタやADC出力レジスタなどのメモリマップドデバイスがある場所に配置すると便利な場合もあります。
const
マイクロコントローラアプリケーションの変数は、ほとんどの場合フラッシュROMに保存されます。それらがRAMに格納されるのは、関数へのconstパラメーターなど、実行時に評価されるときだけです。または、RAMから実行するデバッグビルドを実行している場合。
volatile
他の回答で説明されているように、変数が格納されている場所とは何の関係もありません。
定数はRAMアドレスを必要とするため、ROMに格納できますが、ほとんどの場合、のように(読み取り専用)アセンブリコードに(拡張によって)格納されa += 2
ます。それはそれが得ることができるのと同じくらい速いvolatile
です。