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.

[参考译文] 编译器/MSP430FR2433:声明信息FRAM内部变量的规范方法

Guru**** 2576195 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/640985/compiler-msp430fr2433-canonical-way-to-declare-variables-inside-information-fram

部件号:MSP430FR2433

工具/软件:TI C/C++编译器

您好-

这可能是一个愚蠢的问题,但TI的示例并没有准确地说明这一点。

我知道在GCC中,如果我们要在特定段中存储变量,例如".infomem",您可以添加__attribute__(section(".infomem")),然后就可以了。  只需使用正常的C操作来访问变量。

在FR2433上,您仍需要禁用数据FRAM写入保护,但这没什么大不了的。

是否有类似的方法(使用TI Optimizing C/C++编译器而不是GCC时)允许您将变量声明为活在信息内存中,以便您可以使用简单的C基元来读取(并且在禁用DFWP时写入)?

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

    以下在main之前的初始化应该工作:

    #pragma data_section(variable,".infoA")
    unsigned char变量= 0x00;

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

    TI编译器用户指南提及NOINIT和持久性
    "持久pragma类似于NOINIT pragma,只不过它只能与一起使用
    静态初始化变量。 持久性变量会禁用启动初始化;它们将被指定一个初始化
    值,但不会再次初始化。"

    那么,是否假定使用持久性也意味着变量将位于非易失性存储器中? 例如,当链接程序知道有用于数据的SRAM和用于代码的FRAM时,使用持久性意味着变量应该完全存在于FRAM程序段中?

    同样,在Infomem FRAM区域中声明变量时,我们是否应该将persistent与data_section?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    链接器脚本可以回答我的问题:

    部分
    {
    组(all_FRAM)
    {
    组(read_write_memory)
    {
    .ti.persistent:{} /*用于#pragma持久性 */
    }
    
    组(只读内存)
    {
    cinit :{} /*初始化表 */
    。销钉 :{} /* C++构造函数表 */
    二进制 :{} /*启动时初始化表*/
    init_array :{} /* C++构造函数表 */
    .mspabi.exidx:{} /* C++构造函数表 */
    .mspabi.extab:{} /* C++构造函数表 */
    。const :{} /*常量数据 */
    }
    
    组(可执行内存)
    {
    文本 :{} /*代码 */
    }
    }> FRAM
    

    同样,infoA为NoLoad:

    信息A (无加载):{}>信息A /* MSP430信息FRAM内存段*/