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.

[参考译文] MSP430FR6.9891万:在FRAM中放置变量

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/616907/msp430fr69891-placing-variables-in-fram

部件号:MSP430FR6.9891万
主题中讨论的其他部件:MSP430FR6989

您好,

我很难在FRAM中放置变量。  我正在使用文档技术,使用编译器的#pragma持久性功能。  执行此操作时,变量被放置在RAM中,而不是FRAM中。  下面是我正在使用的代码示例:

#pragma persistent( FRAM_WRITE )
//#pragma location = 0x4400;
unsigned long FRAM_write[128];

这会将FRAM_WRITE置于RAM中,如内存映射中所示:

 输出                                 属性/
书帖  页面   原点     长度      输入书帖
-----------------  --------   --------   --------
.bss      000001   00001c000000059   a    未初始化
                 0.0001万c00   000002000万00200    (0.02万 (.common:fRAM_write)

但是,当我使用#pragma location在FRAM中设置变量的位置(例如,在0x4400位置)时,它将被放置在FRAM中。

#pragma persistent( FRAM_WRITE )
#pragma location = 0x4400;
unsigned long FRAM_write[128]; 

以下是上述代码的内存映射:

.TI.Bound:FRAM_WRITE
*         0.0044万   0000440万   0000.02万    未初始化
                 0.0044万00   000002000万00200    main.obj0.02万 main.obj (.ti.bound:fRAM_write)


使用#pragma位置的唯一缺点是,FRAM_WRITE缓冲区现在正在步进某些代码,因为现在,当使用以下测试代码将缓冲区写入时,代码会崩溃。
它会立即在main()中执行。

memset( fRAM_write, 0xA5, sizeof( fRAM_write ));

这可能是编译器问题?  我正在使用MSP430_CCS.4.LTS和16.9 7.2 .0。

如能就此问题提供任何帮助,我们将不胜感激。

谢谢!
亚当

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

    您正在使用持久性,但没有初始化FRAM_WRITE,我想当您编译它时会有一个警告。

    如果选中Ink_msp430fr6989.cmd文件,您会发现将在FRAM中分配持久性,而在RAM中分配TI.noinit。

    请尝试以下代码:

    unsigned long fRAM_write[128]={0};

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

    您好KC:

    感谢你的帮助。  将初始化添加到变量就是解决问题的方法。  我的代码中没有这一点。

    非常感谢!

    亚当