c - 如何在内存中的特定地址初始化 const 数组?

标签 c arrays embedded constants

这个问题是关于嵌入式 Controller 的。 我想在内存中初始化一个常量数组。但是在将这个数组存储在内存中时,我想将它存储在一个特定的位置,比如 0x8000。这样我想占用一些代码内存,以便稍后在运行时我可以删除该部分并将其用于我自己的其他目的。 基本上我想这样做:

const unsigned char dummy_string[] = "This is dummy string";

但是dummy_string的地址应该在我手上。就像我可以分配我想要的任何地址一样。

最佳答案

使用 pragma 语句将变量放入指定的内存部分。然后使用链接器命令脚本将指定的内存段定位到所需地址。

我浏览了一些 MSP430 文档,我认为它可能会像这样工作......

在源代码中使用#pragma DATA_SECTION。

#pragma DATA_SECTION(dummy_string, ".my_section")
const unsigned char dummy_string[] = "This is dummy string";

然后在链接器 .cmd 文件中执行类似这样的操作。

MEMORY
{
    ...
    FLASH    : origin = 0x8000, length = 0x3FE0
    ...
}

SECTIONS
{
    ...
    .my_section    : {} > FLASH
    ...
}

如果 FLASH 中有多个部分,那么首先列出 .my_section 可能会保证它位于 FLASH 的开头。或者,也许您应该定义一个特别命名的 MEMORY 区域,例如 MYFLASH,它将只包含 .my_section。阅读链接器命令手册,了解有关如何在特定地址定位部分的更多想法。

关于c - 如何在内存中的特定地址初始化 const 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27773812/

相关文章:

c - 使 C 源代码中的大常量更具可读性?

python - 为什么 'groupby(x, np.isnan)' 的行为与 'groupby(x) if key is nan' 不同?

arrays - sails.js Waterline 保存、读取、解析列表或数组

arrays - 将数组内容推送到 DataFrame - Julia

c - Modbus 主从通信

c - 需要帮助将数组结构更改为结构数组

c - printf 中使用的符号

c - 将多个 IP 地址匹配到一个端点

c - 使用 libdl API 调用打开共享库的区别

c - 嵌入式 C 时序问题