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/MSP430FR5994:FRAM空间中的可变数组

Guru**** 2542650 points
Other Parts Discussed in Thread: MSP430FR5994, AFE4404

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/634778/ccs-msp430fr5994-variable-array-in-fram-space

部件号:MSP430FR5994
主题中讨论的其他部件: AFE4404

工具/软件:Code Composer Studio

我正在使用MSP430FR5994微控制器。 使用的开发平台/环境:CCS 6.2。

为了收集分析数据,我需要使用大容量的数据块,这不适合RAM内存。 所以我想将它们移到FRAM内存中。
我已经详细阅读了相应的文档:sla628,slau132q 5.11 20和sla685,以及我发现的有关此问题的所有论坛条目。

fRAM_variables
{
*(*:greenArray)
}> fram 

在main.c中:

long greenArray [256]={0}; 


在不访问数据块的情况下,程序编译,加载和运行时不会出现故障。 但是,只要我将此代码插入到初始化部分,程序就无法运行,尽管已正确编译和加载。

对于(j=0; j<256; j++)
{
greenArray[j]=0;
} 


您能不能帮助我,请您做些什么来使此解决方案发挥作用?

遗憾的是,#pragma NOINIT解决方案具有相同的结果。

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

    你好,Laszlo,

    您是否查看 过msp430fr599x_framwrite.c 示例? 听起来,这可能就是您要寻找的。

    您的初始化代码类似于:

    #if defined(__TI_Compiler_version__)
    #pragma persistent(greenArray)
    long greenArray[256]={0};
    #Elif defined(__IAR_systems_icc__)
    __persistent long
    
    
    
    Array [256]={0};#Elif defined(__GNUC __) long _attribute___((((((((persistent))))_greendent Array ={0};#greanArray
    #endif 

    首次将代码加载到MCU时,数组将初始化为零,但写入到数组的值将在FRAM中保持不变,即使MCU重置直到程序重新加载到MCU。

    此致,

    Ryan

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

    您好,Ryan:

    感谢您提供初始化代码和示例。 示例代码成功运行。

    我试图对我自己的代码采用解决方案,但存在一些问题。 AFE4404传感器每隔10毫秒会导致中断。 我在中断例程中添加了一个LED切换功能,以确认该功能正在运行。

    在开发过程中,我们正在监控通过UART测量的所有结果,但不起作用。 在FRAM中创建的块数据与UART问题之间存在明显的关联。 处理器时钟以8MHz运行,根据我的知识,这是编写FRAM的完美工作速度。

    对我来说,它似乎陷入了永无止境的循环:

    ffor (j=0; j<256; j++)
    {
    greenArray[j]=0;
    } 

    但在另一种情况下,中断处理非常有效。

    非常感谢您的任何想法和帮助,

    Laszlo

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

    我很高兴初始化代码对您起作用! for循环位于程序中的什么位置? 奇怪的是,代码会挂起在for循环中,除非在某个中断中修改变量j,或者中断频繁发生,导致for循环执行非常缓慢。 您可能希望尝试在CCS调试器中为j添加监视表达式,并将不同的值写入greenArray,以便测试代码执行过程中是否有任何数据写入其中。

    您使用UART与哪些设备通信,以及您使用哪些寄存器设置对其进行初始化? 如果MCU通过UART接收数据,您是否能够在UART中设置断点以查看是否正在接收数据?

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

    尊敬的Ryan:

    我发现了错误,"j"变量类型是unsigned char。
    由于它可以采用0-255之间的值,因此j<256始终为真...
    我已将其类型修改为unsigned int,现在它可以完美地工作。
    我仍在验证FRAM中的数据块内容,但它似乎工作正常。

    感谢您的帮助! 您提供的代码示例非常有用!