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 enet_s2e 例程基础上,做简单浮点运算,使用CCS编译器烧录到TM4C1294芯片中,发现不能做浮点运算?

TI工程师:

您好!

我在使用TMC1294NCPD评估版开发时,参考www.ti.com/.../spma072.pdf 文档,按照文档中所描述的步骤在加载enet_s2e例程,因为该例程移植好了FreeRTOS和TCP/IP协议栈,想在该例程基础上做开发,在例程中加入了浮点运算操作,Debug时发现程序会直接跳过浮点运算代码,不执行浮点运算,如下:

针对这个情况,又尝试软件使能FPU,发现还是不行:

一直在找资料调查这个问题,没有找到解决方法,所以在TI E2E社区里问一下TI的工程师们,是否该例程中对浮点运算做了配置?

能否帮忙看下,比较急!

谢谢!

  • 理论上就是需要CCS内打开FPU,在程序内 从fpu.h文件中调用FPUEnable和FPULazyStackingEnable函数就可以了

    我用下面的代码测试TM4C123是没有问题的

    #include <stdint.h>
    #include <stdbool.h>
    #include <math.h>
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/fpu.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/rom.h"
    #ifndef M_PI
    #define M_PI 3.14159265358979323846
    #endif
    #define SERIES_LENGTH 100
    float gSeriesData[SERIES_LENGTH];
    int32_t i32DataCount = 0;
    int main(void)
    {
     float fRadians;
     ROM_FPULazyStackingEnable();
     ROM_FPUEnable();
     ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
     fRadians = ((2 * M_PI) / SERIES_LENGTH);
     while(i32DataCount < SERIES_LENGTH)
     {
     gSeriesData[i32DataCount] = sinf(fRadians * i32DataCount);
     i32DataCount++;
     }
     while(1)
     {
     }
    }