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.

[参考译文] MSP430F67771:全局变量初始化失败

Guru**** 2510095 points
Other Parts Discussed in Thread: MSP430F67771, MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/804301/msp430f67771-global-variable-initialization-failed

器件型号:MSP430F67771
主题中讨论的其他器件: MSP-FET

大家好、

客户正在 MSP430F67771上执行全局变量初始化、但发现全局变量的初始化值是易失性的。  测试代码如下所示:

uint32_t test_value1 = 150;

uint32_t test_value2 = 300;

int main()

  system_pre_init();

  SystemCLK_init();                                                    //配置到系统时钟

                                                                                //ACLK=32.768kHz、MCLK=24.576MHz、SMCLK=12.288MHz

  Watchdog_init();                                                    //在固件初始化期间禁用看门狗

  GPIO_init();                                                          //外设初始化到 GPIO

    while (1)

    {

      如果(test_value1 = 150)

      {

          LED1_ON;

      }

      其他

      {

          LED1_OFF;

      }

      如果(test_value2 == 300)

      {

          LED2_ON;

      }

      其他

      {

          LED2_OFF;

      }

      LED3_OFF;

      _DELAY_CYCLES (1000000);

      LED3_ON;

      _DELAY_CYCLES (1000000);

    }

客户使用 LED1和 LED2来监控全局变量 test_value1/2是否是初始化150/300的值。 然后使用 LED3监视 main() 循环。

问题:

当电路板与调试器相连并在 CCS 8.2.0中进行调试时、LED1和 LED2导通、LED3闪烁。 一切似乎都很好;

2.如果断开调试器的连接并重新为  MCU 供电、有时 LED1&LED2会打开、有时会关闭、但 LED3会闪烁。  因此、全局变量初始化似乎不正确、test_value1/2的值 是随机的。

与客户核实后、优化级别为0、甚至添加"volatile"、 问题仍然存在。 但是、如果他们将全局变量修改为局部变量、 一切看起来都是正确的。  

那么、您对该问题有什么意见吗? 非常感谢。

 

 

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > system_pre_init();
    这是使用的确切代码(无转录错误)吗?

    如果这个函数被命名为"_system_pre_init"、我想它被写入时不会返回结果、所以它有时返回0、有时不返回。 [参考 CCS cc 用户指南(SLAU132T)第6.9.1]节。 如果没有前导的"_"、这种猜测就不适用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bruce、
    感谢您的回复。 仔细检查后、实际上是复制问题。 事实上、客户测试的代码具有领先的"_"。
    还有其他意见吗? 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    库(boot.c)将调用一个使用该名称的函数、并且、根据返回值、将初始化.bss/.data 或不初始化[我建议您阅读 CCS cc 用户指南(SLAU132T)第6.9.1]节。 如果未显式返回值、boot.c 将获取 R12中剩余的任何垃圾、并且可能初始化.bss/.data。

    应更改该函数以显式返回值1 (实际上是非0的任何值)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    我在我的 MSP67791板上测试以下代码、它运行良好。 P1.0在连接 MSP-FET 的调试模式和仅提供 VCC&GND 的自由运行模式下均闪烁。 您能否与我分享客户遇到问题的整个项目? 我想在我的板上重现此问题、以便我可以查看哪里出错了。

    #include 
    #include 
    
    uint32_t test_value1 = 150;
    uint32_t test_value2 = 300;
    
    void main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    
    P1DIR |= BIT0;
    P1OUT &=~BIT0;
    
    while (1)
    {
    如果((test_value1 = 150)&&(test_value2 = 300))
    {
    P1OUT ^= BIT0;
    }
    其他
    {
    while (1)
    {
    P1OUT &=~BIT0;
    }
    }
    _DELAY_CYCLES (50000);
    
    }
    } 

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

    尊敬的 David:

    由于我们在离线模式下讨论了这个问题、我想在此关闭这个主题。

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

    您好、Wei、

    感谢你的帮助。

    是的,客户已找到根本原因:在他们的项目配置中,他们选择初始化模型--使用 RAM 自动初始化模型进行链接(--ram_model,-cr)。 当他们选择其它初始化模型--使用 ROM 自动初始化模型(-rom_model、-cr)进行链接时,一切都正常。  

    David