我正在開發一個嵌入式項目。我正在嘗試使用GNU鏈接器來佈局存儲在外部eeprom中的一些變量。我用在GCC中獲取指針的低16位編譯時間
int __attribute__ ((section (".eeprom"))) eeprom_var1;
分配EEPROM變量做到這一點我也將定義初始化變量的EEPROM,即是這樣的:
int __attribute__ ((section (".eeprom"))) eeprom_var2 = 0x42;
的想法是那麼;在初始化eeprom時,初始化的變量就像初始化數據部分一樣,從.text部分的某處複製到eeprom。顯然,EEPROM變量不能進行讀/寫,但必須雖然功能來訪問,如:
eeprom_read(data, &eeprom_var,sizeof(eeprom_var)).
到目前爲止好,
現在我想用另一個變量的指針來初始化一個EEPROM變量:
unsigned long long __attribute__ ((section (".eeprom"))) eeprom_var1 = 0x42;
unsigned short __attribute__ ((section (".eeprom"))) eeprom_var2 = (unsigned short)&eeprom_var1;
注意的EEPROM使用16位地址空間
但是這給了FO llowing錯誤
foo.c:4:1: error: initializer element is not constant
unsigned short __attribute__ ((section (".eeprom"))) eeprom_var2 = (unsigned short)&eeprom_var1;
^
這是因爲流延到(無符號短)被讀作爲一個初始值設定,其未在允許C.在C++然而上述表達式是確定的操作。
任何人都可以想辦法解決上述錯誤嗎?
/安德斯
你可以使用'asm' – 2014-12-08 09:32:26
你能只是0xFFFF的面膜呢,還是有同樣的結果? – nchen24 2014-12-08 10:28:00
我試過了,這是一樣的 – aes79 2014-12-11 13:03:44