2013-10-28 21 views
1

我希望特定的.c文件中的變量應該存儲在特定的RAM位置,我該如何實現這一點。 我正在爲ARM使用IAR IDE。ARM Cortex M4和C,如何爲特定的c文件指定RAM部分

我想這樣做的原因是,當編譯器將變量存儲在ARM內核的位帶SRAM區域中時,它們不能被正確讀取。如果我評論某段代碼,則編譯器將它們存儲在非位帶SRAM區域中,然後觀察到正確的結果。

回答

2

使用EWARM,您可以使用幾種方法放置變量。您可以使用@放置在特定地址。從IAR's support site

const char RELEASEDATE[16] @ 0x0000FF10 = __DATE__ ; 
const char RELEASETIME[16] @ 0x0000FF20 = __TIME__ ; 

或者,你可以找到在段中的變量(這聽起來像你想要的)使用位置編譯。來自同一來源:

#pragma location = "ConstSection1" 
__root const char RELEASEDATE[16] = __DATE__ ; 
#pragma location = "ConstSection2" 
__root const char RELEASETIME[16] = __TIME__ ; 

而在你的連接文件(.icf),你會:

place at address mem: 0x0000FF10 { readonly section ConstSection1 }; 
place at address mem: 0x0000FF20 { readonly section ConstSection2 }; 

我更喜歡#pragma@操作看起來不合適。此外,有人閱讀代碼預計#pragma是編譯器特定的東西,而@隱藏在代碼中,並沒有脫穎而出。