math.h函数中的sqrt函数导致整个程序在编译后停止运行

时间:2018-01-08 23:58:48

标签: c msp430 math.h code-composer

我正在使用Code Composer Studio与MSP430 MCU配合使用。这些是我正在使用的规范:

  • CCS版本:5.5

  • 编译器版本:TI v4.1.9

  • 编译器优化设置:优化= 0

  • MSP430:MSP430F5528

我开始使用工作设备并添加新功能来计算测量数组的标准偏差。设备一直工作正常,直到我在下面的代码中添加了sqrt函数:

double standardDeviation (int average, int measurements[], int positions){     
    double deviation = 0;
    int i = 0;

    for(i = 0; i <= positions; i++){
        measurements[i] = measurements[i] - average;
        measurements[i] = measurements[i] * measurements[i];
        deviation += measurements[i];
    }

    deviation = deviation/positions;
    deviation = sqrt(deviation);

    return deviation;

}

另外,我的文件标题中有#include <math.h>

当我用sqrt注释掉该行时,设备按预期工作。输入和输出以及数组值都完美运行。信号LED应该是它们应该是,我可以看到在调试模式下的数组值是应该的。

包含sqrt行后,正在调试的固件会自动开始运行。当我暂停程序时,我收到此错误:

&#34;无法在&#34; /tmp/TI_MKLIBSF5oIb/SRC/copy_decompress_rle.c"找到源文件; 找到文件或编辑源查找路径以包含其位置。&#34;

如果包含sqrt,即使偏差变量与设备的任何输入或输出完全分离,设备也不再按预期运行。在不同场合上传固件后,设备立即打开所有输出,没有任何输出打开,输出随机打开和关闭。我无法测量输入的任何值,因为我无法暂停程序。

我测试过的事情:

  • 评估测量[] *测量[]以确保值不会太大,同样的故障如上所述
  • 使用sqrt注释掉该行,该设备按预期工作
  • 将sqrt函数内的变量替换为4,上述相同的失败
  • 将measurements []数组的所有位置设置为1,上述相同的故障
  • 在标头中定义变量偏差以使用静态内存而不是dynmaic

0 个答案:

没有答案