我希望特定 .c 文件中的变量应该存储在特定的 RAM 位置,我该如何实现这一点。我正在为 ARM 使用 IAR IDE。
我想这样做的原因是当编译器将变量存储在 ARM 内核的位带 SRAM 区域中时,它们无法正确读取。如果我注释某些代码部分,则编译器将它们存储在非位带 SRAM 区域中,然后观察到正确的结果.
我希望特定 .c 文件中的变量应该存储在特定的 RAM 位置,我该如何实现这一点。我正在为 ARM 使用 IAR IDE。
我想这样做的原因是当编译器将变量存储在 ARM 内核的位带 SRAM 区域中时,它们无法正确读取。如果我注释某些代码部分,则编译器将它们存储在非位带 SRAM 区域中,然后观察到正确的结果.
使用 EWARM,您可以使用几种方法放置变量。您可以使用 放置在特定地址@
。来自IAR 的支持网站:
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
是特定于编译器的东西,而@
将自己隐藏在代码中并且不会脱颖而出。