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.

[参考译文] 编译器/MSP430FG4618:来自math.h库的sinf和cosf似乎会在MCU上导致意外重置

Guru**** 2589280 points
Other Parts Discussed in Thread: MSP430FG4618

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/614929/compiler-msp430fg4618-sinf-and-cosf-from-math-h-library-seem-to-causes-unexpected-reset-on-mcu

部件号:MSP430FG4618

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

我的程序使用TI v 16.9 .3.LTS编译器提供的math.h库中的三角函数。

我有两个问题。

1.它们会导致CPU意外重置。

  -在运行该函数时(例如“sinf”),CPU由于某种原因而重新启动。

2.它们会导致不相关变量的损坏

  -当它通过函数时,其他一些变量的值会因某种原因而发生变化。

  -使用调试接口进行检查。

如果我跟踪导致问题的函数实例并将其注释掉,则代码似乎运行正常。

是否有编译器设置必须从默认项目设置中更改?

如何修复?

谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否启用了监视程序计时器? 请尝试禁用它以查看在这种情况下Sinf是否有效。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Steve123"]2. 它们会导致不相关变量的损坏

      -在执行该函数时,其他一些变量的值会因某种原因而发生变化。[/QUOT]程序可能没有足够的堆栈空间。 有关   如何在堆栈溢出时设置断点的信息,请参见www.ti.com/.../slau157中的Break on stack overflow,以了解堆栈溢出是否是问题的原因。

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

    程序可能没有足够的堆栈空间。

    在CCS中,7.2 使用TI MSP430 v 16.9 .3.LTS编译器为MSP430FG4618创建了以下测试程序:

    #include <math.h>
    
    float input = 1.234f;
    float output;
    
    void main (void)
    {
    输出= Sinf (输入);
    OUTPUT = cosf (输入);
    } 

    CCS 7堆栈使用情况视图显示,对于仅调用sinf()和cosf()的简单测试,需要878字节的堆栈空间:

    在CCS 7.2 中创建的MSP430FG4618项目的缺省堆栈大小为80字节,不足以调用sinf()和cosf()。

    “堆栈使用情况”视图应有助于计算程序的实际堆栈大小要求。

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

    我认为看门狗计时器已通过以下语句禁用。

    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

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

    我已使用选择DEBUG执行了stackview。

    图中显示的部分显示了最大的包容尺寸  

    上图显示了缺省堆和堆栈大小。

    我是否应该将堆栈大小设置为大于堆栈使用情况视图中显示的所有堆栈大小的总和?

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

    I should I set size than the sum size of all stack sizes shown in Stack Usage view?

    如果程序没有任何操作系统,堆栈大小应大于调用main函数的总和(在您的情况下为_c_int00_noargs_notexit) 以及任何中断处理程序使用的最大堆栈大小。

    我刚刚发现,“CCS 7.2 堆栈使用情况”视图在某些情况下可能会少报所需的堆栈大小,请参见 CCS/MSP430FG4618:“CCS 7.2 堆栈使用情况”可能少报发生符号别名功能时的堆栈大小要求。 在这种情况下,建议 您也运行cG_xml call_graph实用程序,请参阅 了解静态堆栈使用情况

    请注意 “查找静态堆栈使用 情况Wiki”页面上有关间接函数调用的注意事项。

    鉴于在某些情况下工具可能会对堆栈大小报告不足,因此值得在堆栈大小上添加额外的"安全余量"。