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.

[参考译文] 编译器:TI MSP430在编程时间初始化闪存

Guru**** 2502205 points
Other Parts Discussed in Thread: MSP430G2453

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/650196/compiler-ti-msp430-initialize-flash-on-programming-time

主题中讨论的其他器件:MSP430G2453

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

你(们)好

我想知道如何在编程时(仅限)将初始值设置(写入)到闪存。

编程后、微控制器将更改闪存的值并保持该值。 再说一次、我希望仅在编程时间内设置初始值。

我使用的是"CCS6.2.0"、"TI 编译器"、我的器件是"MSP430G2453"。

谢谢

此致、

最小

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

    您可以使用 const 或 persistence 类型和初始值定义变量。

    此致、
    冬季
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复、Winter Yu。
    您能为我屏蔽一些示例吗?

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

    我应该更好地解释我的闪存使用案例。
    当我的 MSP430首次启动时、(启动)从闪存读取存储在 NVM 存储器中的配置数据。
    在运行 MSP430时、如果需要、可在 NVM 存储器中写入(更改)配置数据。 因此、下一次、
    当我的 MSP430重新启动时、它能够使用已更改的配置数据。 到目前为止、它的工作效果都很好。

    现在、我只想在编程时间内设置(初始值)闪存存储器上的配置数据、并且控制器能够具有
    仅首次使用相同的配置值。

    请指导我如何操作? 如果你能给我举一个例子、那将会很好。 (我的闪存存储器的起始地址为0x1000、16位、大小= 10)

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

    您好、Min、

    您可以参考此代码作为示例。

    //
    // MSP430G2xx3演示-闪存系统内编程、将 SegC 复制到 SegD
    //
    说明:此程序首先擦除闪存段 C、然后将
    段 C 中的所有//值递增、然后擦除段 D、然后将段 C 复制到段 D。
    //假定 MCLK 771kHz - 1428kHz。
    ////////*在主循环中的 NOP 上设置断点,以避免对闪存造成应力*//
    
    ////// MSP430G2xx3
    // --------
    // /|\| XIN|-
    // || |
    // -|RST XOUT|-
    // | |////
    
    D. Dang
    // Texas Instruments Inc.
    // 2010年12月
    //使用 CCS 版本4.2.0和 IAR 嵌入式工作平台版本构建:5.10
    //*********
    
    #include 
    
    unsigned int i;
    unsigned short value[10]; //要存储在闪存中的值
    
    //*在闪存段中定义变量,具有持久性类型和初始值
    **在编程时间内设置(初始值)闪存上的配置数据
    */
    #pragma PERSISTENT (configureData)
    unsigned short configureData[10]={1、2、3、4、5、6、7、8、9、10};
    
    //函数
    Write_ConfigureData (unsigned ConfigureData)
    void read_ConfigureData (无符号短整型*值);
    
    int main (void)
    {
    WDTCTL = WDTPW + WDTHOLD; //如果
    (CALBC1_1MHz=0xFF)则停止看门狗计时器//如果校准常数被擦除
    {
    while (1); //不加载,陷阱 CPU!!
    }
    DCOCTL = 0; //选择最低 DCOx 和 MODx 设置
    BCSCTL1 = CALBC1_1MHZ; //将 DCO 设置为1MHz
    DCOCTL = CALDCO_1MHz;
    FCTL2 = FWKEY + FSSEL0 + FN1; //针对闪存时序发生器
    
    READ_ConfigureData (Value)的 MCLK/3; //从 configureData (闪存中)读取
    
    (i=0;i<10;i++)
    {的值
    Value[i]++; //每次重新引导的增量
    }
    
    WRITE_ConfigureData (value); //将值写入 configureData (在闪存中)
    
    while (1){;}//永远重复
    
    }
    
    void write_ConfigureData (unsigned short *值)
    {
    unsigned short * Flash_ptr; //闪存指针
    unsigned int i;
    
    Flash_ptr = configureData; //初始化闪存指针
    FCTL1 = FWKEY + ERASE; //设置擦除位
    FCTL3 = FWKEY; //清除锁定位
    * Flash_ptr = 0; //虚拟写入擦除闪存段
    
    FCTL1 = FWKEY + WRT; //将 WRT 位设置为
    
    (i=0;i<10;i++)
    {
    *闪存_PTR++=值[i]; //将值写入闪存
    }
    
    FCTL1 = FWKEY; //清除 WRT 位
    FCTL3 = FWKEY + LOCK; //设置锁定位
    }
    
    void read_ConfigureData (unsigned short *值)
    {
    unsigned short * Flash_ptr; //段 C 指针
    unsigned int i;
    
    Flash_ptr = configureData; //初始化(
    
    i=0;i<10;i++)
    {的闪存段 C 指针
    Value[i]=* Flash_PTR++; //将值写入闪存
    }
    
    

    此致、

    冬季

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

    您好、Min、

    此外、您需要将此代码添加到.cmd 文件中。  

    此致、

    冬季