This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430F5438A:MSP430 GCC:将变量放置到专用 RAM /闪存地址

Guru**** 2587355 points
Other Parts Discussed in Thread: MSP430F5438A

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/882239/ccs-msp430f5438a-msp430-gcc-placing-variables-to-dedicated-ram-flash-addresses

器件型号:MSP430F5438A

工具/软件:Code Composer Studio

我选择了具有 msp430f5438a 链接器命令文件的编译器版本 GNU v8.3.1.25 (Mitto Systems Limited)。  

现在、我要在的存储器中设置变量(链接器文件示例):

RAM:origin = 0x1C00、length = 0x4000 //* end=0x5BFF、size 16384 */

ROM (Rx):origin = 0x5C00、length = 0xA380 // end=0xFF7F、size 41856 */

HIROM (Rx):origin = 0x00010000、length = 0x00035BFF 

如何将变量设置为存储器中的特定地址、例如0x001c00 (RAM)或0x005c00 (闪存)? 使用#pragma LOCATION (...) ,我已经尝试过,但似乎不适用于 GCC。 我不想在链接器文件中创建额外的段;这是可能的吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Marco Steinborn"]我不想在链接器文件中创建额外的段;这是可行的吗?

    我不知道怎么做。  我知道的唯一方法是使用 section 变量属性将变量放入您命名的段中。  在链接器脚本中、将该段分配到所需的地址。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    目前无法完全通过 C/C++实现这一目标。 今年、我们实际上添加了相应的功能、以便能够使用函数和数据的"位置"属性将其放置在特定地址。

    正如 George 提到的、您需要将"section"属性用于关联的链接器脚本更新。

    一个简单示例:

    int __attribute__((section(".qdata.2000"))) var_at_0x2000 = 1;
    int __attribute__((section(".qdata.2100"))) var_at_0x2100 = 2; 

    然后在链接器脚本中(0x1C00是 RAM 的起始地址):

    .data:
    {
    三、会议的报告
    
    。 = 0x2000 - 0x1c00;
    *(.qdata.2000)
    。 = 0x2100 - 0x1c00;
    *(.qdata.2100)
    
    
    .................} > RAM at > ROM 

    现在在链接的输出可执行文件中:

    $ nm a.out | grep var_at
    00002000 D var_at_0x2000
    00002100 D var_at_0x2100 

    以下 是有关链接器脚本放置的大量有用文档:https://sourceware.org/binutils/docs/ld/Location-Counter.html#Location-Counter