2012-05-03 327 views
3

在哪個部分是存儲在c中的常量易失性變量?在微控制器中,我們應該將這種變量放入RAM中。對?c中存儲的常量volatile變量在哪裏?

+1

在微控制器中,您可以看到端口引腳通常定義爲易失性變量。由於該編譯器不會優化代碼並且不會用緩存值替換該值。所以我們可以確保每次只能從端口引腳讀取最新的更新值。 – kapilddit

回答

7

A const volatile變量意味着你的C程序不能合法地改變它,但其他東西可以。將這個變量放在RAM中是合乎邏輯的,但是如果您通過鏈接描述文件或類似選項將其放置在ROM中,編譯器就不會抱怨。在某些存儲器映射設備所在的位置找到這個變量也是有用的,例如,一個只讀定時器計數器寄存器或一個ADC輸出寄存器。

+0

因此,如果我們將常量變量分配給ROM,那麼編譯器會自動將這些變量分配給ROM。對? – suraj

+0

這取決於你的編譯器以及你如何使用它。 –

9

Volatile已經注意到存儲變量的位置。它只是告訴編譯器每次從內存中讀取變量以避免編譯器可能爲該變量執行的任何優化。

3

const單片機應用程序的變量很可能存儲在閃存中ROM。它們存儲在RAM中的唯一時間是在運行時對它們進行評估,例如函數的const參數。或者當你正在做一些從RAM執行的調試版本。

volatile與存儲變量的位置無關,如其他答案中的解釋。

9
  1. 局部變量和函數幀 - 堆如果未初始化

  2. 全局和靜態變量 - 通過符號的.bss塊起始如果

  3. 全局和靜態變量初始化 - 數據段

  4. 環境變量和參數 - 在堆棧頂部

  5. 動態數據分配 - 堆

  6. CONST - ROM

  7. 揮發性 - 沒有存儲

  8. 寄存器 - CPU寄存器

  9. CONST揮發性的 - 在相同的地方爲const存儲