ARM Cortex M4和C,如何为特定的c文件指定RAM部分

时间:2013-10-28 05:55:49

标签: c arm microcontroller

我希望特定.c文件中的变量应存储在特定的RAM位置,我该如何实现。 我正在使用IAR IDE for ARM。

我想这样做的原因是当编译器将变量存储在ARM内核的位带SRAM区域时,它们无法正确读取。如果我对代码的某些部分进行注释,则编译器将它们存储在非位带SRAM区域中然后更正观察结果。

1 个答案:

答案 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是特定于编译器的东西,而@隐藏在代码中并且不会脱颖而出。