2

どのセクションに定数揮発性変数がcに格納されていますか?マイクロコントローラーでは、そのような種類の変数をRAMに配置する必要があります。右?

4

5 に答える 5

9

Volatile変数が格納されている場所とは関係ありません。コンパイラがその変数に対して実行する可能性のある最適化を回避するために、毎回メモリから変数を読み取るようにコンパイラに指示するだけです。

于 2012-05-03T11:12:14.300 に答える
9
  1. ローカル変数と関数フレーム-スタック

  2. 初期化されていない場合のグローバル変数と静的変数-.bssブロックはシンボルで始まります

  3. 初期化されている場合のグローバル変数と静的変数-データセグメント

  4. 環境変数と引数-スタックの最上位

  5. 動的データ割り当て-ヒープ

  6. Const-ROM

  7. 揮発性-ストレージなし

  8. レジスタ-CPUレジスタ

  9. Constvolatile-conststorageと同じ場所にあります

于 2012-12-30T09:02:29.013 に答える
7

変数は、Cプログラムが法的に変更できないことを意味しますが、他のconst volatile何かは変更できます。この変数をRAMに配置するのは論理的ですが、(リンカースクリプトまたは同様のオプションを介して)ROMに配置するように指示しても、コンパイラは文句を言いません。この変数を、読み取り専用タイマーカウンターレジスタやADC出力レジスタなどのメモリマップドデバイスがある場所に配置すると便利な場合もあります。

于 2012-05-03T11:31:08.927 に答える
3

constマイクロコントローラアプリケーションの変数は、ほとんどの場合フラッシュROMに保存されます。それらがRAMに格納されるのは、関数へのconstパラメーターなど、実行時に評価されるときだけです。または、RAMから実行するデバッグビルドを実行している場合。

volatile他の回答で説明されているように、変数が格納されている場所とは何の関係もありません。

于 2012-05-03T11:50:12.710 に答える
0

定数はRAMアドレスを必要とするため、ROMに格納できますが、ほとんどの場合、のように(読み取り専用)アセンブリコードに(拡張によって)格納されa += 2ます。それはそれが得ることができるのと同じくらい速いvolatileです。

于 2021-12-16T13:26:40.663 に答える