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

标签 c arm microcontroller

我希望将特定 .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/

相关文章:

linux - 使用 linux-arm-gnueabi-g++ 编译适用于 ARM 的 QT 时出现 XLib 错误

C: 有没有办法降低 printf 输出的速度

c - 64 位平台上 GCC 中的基本堆使用统计信息

c - 以原子方式将值存储在 uint8_t (C)

assembly - 构建最少的汇编代码会产生空的二进制文件

gcc - 为什么即使从未访问堆栈,arm-gcc 也会递减/递增堆栈指针?

c - 静态 const 与 const 声明在 uC 上的性能差异

microcontroller - 牛逼!建筑比比皆是!寻找嵌入式处理器/ Controller 分类法

c - 双向链表: Deleting all occurrences of a given key

c - 这种类型的 yacc 代码有效吗?