我希望特定.c文件中的变量应存储在特定的RAM位置,我该如何实现。 我正在使用IAR IDE for ARM。
我想这样做的原因是当编译器将变量存储在ARM内核的位带SRAM区域时,它们无法正确读取。如果我对代码的某些部分进行注释,则编译器将它们存储在非位带SRAM区域中然后更正观察结果。
答案 0 :(得分:2)
使用EWARM,您可以使用几种方法放置变量。您可以使用@
放置在特定地址。来自IAR's support site:
const char RELEASEDATE[16] @ 0x0000FF10 = __DATE__ ;
const char RELEASETIME[16] @ 0x0000FF20 = __TIME__ ;
或者,您可以使用location pragma在一个部分中找到变量(听起来像您想要的那样)。来自同一个来源:
#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
是特定于编译器的东西,而@
隐藏在代码中并且不会脱颖而出。