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/MSP430G2553:正确管理主内存

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/575473/ccs-msp430g2553-managing-the-main-memory-correctly

部件号:MSP430G2553

工具/软件:Code Composer Studio

您好,

我有一个组合 键盘,LCD等的程序。

我需要保存一些配置,如果我刷新新软件,这些配置将被擦除,因此我需要在主内存中设置这些配置。

但是,如果我设置了,例如,地址0x0FE00中的字符,程序将不工作(不刷新),但如果我将地址设置为0xFC00,程序将再次开始工作。

为什么会发生这种情况?

谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    擦除某些闪存时,将擦除整个句段。 因此,您不能擦除与您仍需要的其他数据位于同一数据段中的任何数据。 在G2553上,中断向量表(也包含程序开始地址)从FFC0开始。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,感谢您的回复,
    我有这些行:

    WriteShortToFlash(((Short*)0xFC00,(Short)n_o_d);// nod_selection
    WriteLongToFlash((Long*)0xFBFE,(Long)max_weight);// Max_Weight
    WriteToFlash((char*)0xFBFA,(char)cnt_By);// Count_By
    ReadShortFromFlash(((short*)0xFC00,(short*)&n_o_d);// nod_selection
    ReadLongFromFlash((Long*)0xFBFe,(Long*)&max_weight);// Max_Weight
    ReadFromFlash((char*)0xFBFA,(char*)&cnt_By);// Count_By

    据我所知,短大小为2字节,长大小为4字节,字符为字节。
    在0xFC00上设置短路将采用以下地址:0xFC00,0xFBFF
    将long置于0xFBFE上采用以下地址:0xFBFE,0xFBFD,0xFBFC,0xFBFB
    将CHAR置于0xFBFA上会采用以下地址:0xFBFA

    但当我在屏幕上显示这些值时,我只得到正确的字符值

    另一件事,如果我要更改地址(中间的字符):

    WriteShortToFlash(((Short*)0xFC00,(Short)n_o_d);// nod_selection
    WriteToFlash((char*)0xFBFE,(char)cnt_By);// Count_By
    WriteLongToFlash((Long*)0xFBFD,(Long)max_weight);// Max_Weight
    ReadShortFromFlash(((short*)0xFC00,(short*)&n_o_d);// nod_selection
    ReadFromFlash((char*)0xFBFe,(char*)&cnt_By);// Count_By
    ReadLongFromFlash((Long*)0xFBFD,(Long*)&max_weight);// Max_Weight

    显示短值和长值,但不显示字符值。

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

    主存储器闪存的大容量擦除最常见,因此我建议将变量存储在信息存储器中,因为您可以告诉程序员保持此存储器完好无损。
    虽然C不喜欢硬编码地址,但通过将十六进制值作为 指针来重载并不困难。