【轉】#pragma data:code和#pragma data:data(cannot initialize RAM area )

轉自:http://hi.baidu.com/helloelectron/blog/item/337f12a32684a09bd0435841.html

前者表示:隨後的數據將存貯在程序區,即FLASH區,此區只能存貯常量,比如表格之類。
後者表示:隨後的數據將存貯在數據區,即RAM區,此區可存貯常量和變量。

附註和擴充
#pragma 編譯附註
這個編譯器接受以下附註
#pragma interrupt_handler <func1>:<vector number> <func2>:<vector> ...
這個附註必須在函數之前定義 它說明函數func1 func2 是中斷操作函數所以編譯器在中斷操作函數中生成中斷返回指令reti 來代替普通返回指令ret 並且保存和恢複函數所使用的全部寄存器同樣編譯器根據中斷向量號vector number 生成中斷向量地址。
#pragma ctask <func1> <func2>...
這個附註指定了函數不生成揮發寄存器來保存和恢復代碼 它的典型應用是在RTOS實時操作系統中讓RTOS 核直接管理寄存器。
#pragma text:<name>
改變代碼段名稱 使其與命令行選項相適應
#pragma data:<data>
改變數據段名稱 使其與命令行選項相適應這個附註在分配全局變量至EEPROM中時必須被使用讀者可參考訪問EEPROM 的例子。
#pragma abs_address:<address>
函數與全局數據不使用浮動定位 重定位而是從<address>開始分配絕對地址這在訪問中斷向量和其它硬件項目時特別有用。
#pragma end_abs_address
結束絕對定位使目標程序使用正常浮動定位

/////////////////////////////////////////////////////////////////////////////////////////////////

注意下圖

我用的是ICCavr7 使用const 編譯會報錯cannot initialize RAM area

所以將const改爲flash http://hi.baidu.com/helloelectron

或者設置如下圖:




觀察一下 code memory



再觀察一下沒有使用 #pragma data:code 的code memory



發佈了8 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章