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.

[参考译文] Starterware/MSP430FR6972:将阵列分配到FRAM中的DATA20_P的问题

Guru**** 2532800 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/578940/starterware-msp430fr6972-the-question-of-allocating-array-to-data20_p-in-the-fram

部件号:MSP430FR6972

工具/软件:Starterware

您好,先生,

我要将一些阵列存储在FRAM的两个DATA20_P段中,DATA20_P在lnkmsp430fr6972.xcl中设置如下

//---------------
//在FRAM中读/写数据
//
-Z (const)DATA16_P,DATA20_P=D000-FF7F,1.004万-13FFF
-Z (da)DATA16_HEap+_DATA16_HEAM_SIZE
-Z (数据) DATA20_HEap+_DATA20_HEAME_SIZE

//--------- 

我将数组定义如下

__persistent unsigned int CurrentFaultBuffer[5120]={0x0000};
__persistent unsigned int ElecfieldFaultBuffer[5120]={0x0000};

__persistent unsigned int Fault1Buffer[960]={0x0000};
__persistent unsigned int Fault2Buffer[960]={0x0000}; 

如果CurrentFaultBuffer[5120]分配给0xD000-0xFF7F,则其他数组分配给0x1.004万-0x13FFF, 则DATA20_P的空间就足够了。 但是,我发现所有阵列都分配到0x1.004万-0x13FFF,所以这是一个错误  

问题是如何 将 CurrentFaultBuffer[5120]分配给数据段DATA20_P(0xD000-0xFF7F),并将其他分配给数据段DATA20_P(0x1.004万-0x13FFF)?

此致

Jent

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

    5120整数值等效于0x2800字节,如果与主代码共享,则可能不足以容纳0xD000-0xFF7F空间(0x2F7F)。 为什么要使用自定义链接程序文件而不是默认文件,默认文件使用的是完全低内存模型(0x4400-0xFF7F),并且有更多的连续空间专用于持久性变量? 我建议为代码保留较大的内存空间(>0x1万)。

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

    谢谢你Ryan,

    0xD000- 0xFF7F 仅存储DATA20_P, 主代码 存储在6C00- CF7F中。整个.xcl如下:

    //---------------
    //在FRAM中读/写数据
    //
    -Z (const)DATA16_P,DATA20_P=D000-FF7F,1.004万-13FFF
    -Z (da)DATA16_HEap+_DATA16_HEAM_SIZE
    -Z (数据) DATA20_HEap+_DATA20_HEAME_SIZE
    //---------
    //常量数据
    //
    -Z (const) DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,checksum=6C00-CF7F
    
    //---------------
    //---------------
    //代码
    //
    -Z (代码) CSTART,ISR_CODE,CODE16=6C00-CF7F
    
    //---------------
    //代码
    
    -P (代码) code=6C00-CF7F
    -Z (代码) code_pad
    
    //---------------
    //---------------
    //常量数据
    //
    -Z (const) DATA20_C,DATA20_ID,code_ID=6C00-CF7F
    
    //---------------
    //签名存储器和中断向量
    //
    
    -Z (const) signature=CF80-CF8F
    -Z (代码) INTVEC=CF90-CFFF
    -Z (代码) reset=CFFE-CFFF
    

    我在FRAM中放入了两个程序(应用程序,升级程序), 上面提到了应用程序的.xcl文件。升级程序被分配到另一个.xcl文件中的0x4400-0x6BFF,因此我必须使用0x1.004万-0x13FFF 来存储数据

    此致

    Jent

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

    编译器似乎不喜欢在内存的较低和较高段之间进行永久分割。 此外,当您尝试将持久性变量环绕在中断向量周围时,MPU也会出现问题。 是否可以使用以下内存映射?

    持久性变量:0x4400到0xA2FF
    升级代码:0xA300至0xCAFF
    应用程序代码:0xCB00至FF7F,0x1万至0x12F00

    这样,变量将保留在较低的内存中,而代码将被拆分,这似乎是链接器/编译器的首选。

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

    此致,
    Jent