我希望将特定 .c 文件中的变量存储在特定的 RAM 位置,我该如何实现。 我正在使用适用于 ARM 的 IAR IDE。
我想这样做的原因是,当编译器将变量存储在 ARM 内核的位带 SRAM 区域时,它们无法被正确读取。如果我注释某些代码段,则编译器将它们存储在非位带 SRAM 区域,然后更正观察结果。
最佳答案
使用 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
是特定于编译器的东西,而 @
将自己隐藏在代码中并且不会突出显示。
关于c - ARM Cortex M4 和 C,如何为特定的 c 文件指定 RAM 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19627992/