Embedded exp()math.cic在循环中不起作用

Embedded exp()math.cic在循环中不起作用,embedded,exp,psoc,cypress-psoc,Embedded,Exp,Psoc,Cypress Psoc,我目前正在为学校项目设计pid调节器。 由于电晕已经关闭了学校,我们无法用任何硬件来测试它。 所以我想在微处理器(PSoC5LP)上模拟PID调节器。 所以我实现了一个函数,返回所选直流电机的阶跃响应 当我查找transferfunction的输出“(-3.47*exp(-6.36*s)+3.47)),如果我在代码中手动定义“s”的值,我会得到正确的结果。 但是当我在代码“undefined reference to”exp中将s设置为递增时 问题似乎是我不能在循环中运行exp,同时递增它。 在

我目前正在为学校项目设计pid调节器。 由于电晕已经关闭了学校,我们无法用任何硬件来测试它。 所以我想在微处理器(PSoC5LP)上模拟PID调节器。 所以我实现了一个函数,返回所选直流电机的阶跃响应

当我查找transferfunction的输出“(-3.47*exp(-6.36*s)+3.47)),如果我在代码中手动定义“s”的值,我会得到正确的结果。 但是当我在代码“undefined reference to”exp中将s设置为递增时

问题似乎是我不能在循环中运行exp,同时递增它。 在另一个项目中尝试了它,其中唯一发生的事情是循环运行10次并打印出exp(),其中包含循环已运行的次数(不起作用)

float step_response(){
双s=0.1;
snprintf(outpurBuffer,sizeof(outpurBuffer),%f\r\n,(-3.47*exp(-6.36*s)+3.47));
pc_uart_PutString(输出缓冲区);
snprintf(outpurBuffer,sizeof(outpurBuffer),%f\r\n,(-3.47*exp(-6.36*1)+3.47));
pc_uart_PutString(输出缓冲区);
//这些很好用
pc_uart_PutString(“循环:\r\n”);
对于(s=0.1;s<2;s++){
snprintf(outpurBuffer,sizeof(outpurBuffer),%f%f\r\n“,s,(-3.47*exp(-6.36*s)+3.47));
pc_uart_PutString(输出缓冲区);
//这不起作用(如果用数字更改“s”,则效果良好。)
};
返回0;
};
因此,如果我在循环中手动选择S,它就会工作,但如果它增加,它就会停止。 我尝试使用另一个变量并增加它,但它仍然不起作用

float step_respons(){
    double s = 0.1;
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f \r\n", (-3.47*exp(-6.36*s)+3.47));
        pc_uart_PutString(outpurBuffer);
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f \r\n", (-3.47*exp(-6.36*1)+3.47));
        pc_uart_PutString(outpurBuffer);
    //These works just fine

    pc_uart_PutString("Loop:\r\n");

    for(s = 0.1; s < 2; s++){
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*s)+3.47));
        pc_uart_PutString(outpurBuffer);
        //this does not work (if "s" is changed with a number it works fine.)

    };

    return 0;
};
    for(s = 0.1; s < 2; s++){
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*s)+3.47));
        pc_uart_PutString(outpurBuffer);

    };
    for(s = 0.1; s < 2; s++){
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*1)+3.47));
        pc_uart_PutString(outpurBuffer);

    };
(s=0.1;s<2;s++)的
{
snprintf(outpurBuffer,sizeof(outpurBuffer),%f%f\r\n“,s,(-3.47*exp(-6.36*s)+3.47));
pc_uart_PutString(输出缓冲区);
};
不起作用

float step_respons(){
    double s = 0.1;
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f \r\n", (-3.47*exp(-6.36*s)+3.47));
        pc_uart_PutString(outpurBuffer);
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f \r\n", (-3.47*exp(-6.36*1)+3.47));
        pc_uart_PutString(outpurBuffer);
    //These works just fine

    pc_uart_PutString("Loop:\r\n");

    for(s = 0.1; s < 2; s++){
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*s)+3.47));
        pc_uart_PutString(outpurBuffer);
        //this does not work (if "s" is changed with a number it works fine.)

    };

    return 0;
};
    for(s = 0.1; s < 2; s++){
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*s)+3.47));
        pc_uart_PutString(outpurBuffer);

    };
    for(s = 0.1; s < 2; s++){
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*1)+3.47));
        pc_uart_PutString(outpurBuffer);

    };
(s=0.1;s<2;s++)的
{
snprintf(outpurBuffer,sizeof(outpurBuffer),%f%f\r\n“,s,(-3.47*exp(-6.36*1)+3.47));
pc_uart_PutString(输出缓冲区);
};
可以工作,但不增加结果 正如您所能看到的,在循环中所做的唯一更改是“s”被定义为一个值

double temp = 0.5;

    for(s = 0.1; s < 2; s++){
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*temp)+3.47));
        pc_uart_PutString(outpurBuffer);    

    };
双温=0.5;
对于(s=0.1;s<2;s++){
snprintf(outpurBuffer,sizeof(outpurBuffer),%f%f\r\n“,s,(-3.47*exp(-6.36*temp)+3.47));
pc_uart_PutString(输出缓冲区);
};
这很有效

double temp = 0.5;

for(s = 0.1; s < 2; s++){
        snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*temp)+3.47));
        pc_uart_PutString(outpurBuffer);    
        temp += 0.5;
    };

双温=0.5;
对于(s=0.1;s<2;s++){
snprintf(outpurBuffer,sizeof(outpurBuffer),%f%f\r\n“,s,(-3.47*exp(-6.36*temp)+3.47));
pc_uart_PutString(输出缓冲区);
温度+=0.5;
};
不 这是错误:
生成错误:未定义对“exp”的引用。

编译器输出中的日志

---------------开始构建:2020年4月28日01:34:42项目:Plotterkode,配置:ARM GCC 5.4-2016-q2-update调试--------------- 代码生成步骤是最新的。 编译步骤是最新的,不需要做任何工作。 arm-none-eabi-ar.exe-rs.\CortexM3\arm\u GCC\u 541\Debug\Plotterkode.a.\CortexM3\arm\u GCC\u 541\Debug\cy\u em\u eeprom.o.\CortexM3\arm\u GCC\u 541\Debug\CyDmac.o.\CortexM3\arm\u GCC\u 541\Debug\cyblash.o.\CortexM3\arm\arm\u GCC\u-GCC\u 541\Debug\cyblash.o.\CortexM3\CortexM3\GCC\arm\GCC\GCC\cyp\cyp\tc\tc\cf1\cortex\cf1\(cotexm3\ARM(GCC)GCC(GCC)Gc(Gc)Gc(Gc)Gc(Gc)541\调试(调试)pc机(PM.o)CortexM3\CortexM3\ARM(GCC)GCC(GCC)Gc(Gc)Gc)Gc)Gc(GCC)Gc)Gc(Gc)Gc(PM.o.CortexM3\CortexM3\CortexM3\CortexM3\ARM(Gc)Gc(Gc)Gc)Gc(Gc)Gc(Gc)Gc(GCC(Gc)Gc)Gc(Gc(Gc)Gc)Gc(Gc(Gc)Gc)Gc)Gc(Gc(Gc)Gc(Gc)Gc(Gc)Gc(Gc)Gc)Gc(Gc(Gc)Gc(Gc)Gc(Gc)Gc)Gc\MISO.o.\CortexM3\ARM\u GCC\u 5CortexM3\ARM\ARM\ARM\Gcococococococococococococococococococococococococotexm3\armcocococococococococococococococococococococococococococococococococococococococococococococococococotexm3\armcocococococococococococococococococococococococomem3\armcocococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococo\ u GCC\u 541\Debug\pot\u adc\u sar_该文给出了以下两个方面的结果。例如:CortexM3\CortexM3\CortexM3\CortexM3\CortexM3\ARM\GCC(GCC)cocot\CortexM3\CortexM3\CortexM3\CortexM3\CortexM3\CortexM3\CortexM3\CortexM3\CortexM3\CortexM3\ARM\ARM\ARM\GCC-GCC\cococococococ.coc.coc.cot\CortexM3\CortexM3\CortexM3\ARM\ARM-GCC.GCC\GCC\GCC\GCC\GCC\GCC-cococococococ\cocococ.coc.coc\u-co4\coc\coc\cu4\coc.1\co4\co4\co4\cococ\coc.1\coc\coc\cocococ\cococ.1\u-coc\cococ\coco\ Debug\pin\u启用。CortexM3\ARM\ARM\GCC(GCC)GCC(GCC)GCC(GCC)GCC(GCC(GCC)541\Debebebebebebebebebebebebebecocococococococococococococococococococococococococococococococococococococococococortexm3\CortexM3\Artexm3\Arcocococococococococococococococococococococomem3\ArGGGGC(GCC(GCC)cococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococococoUi_spi.o\CortexM3\ARM\u GCC\u 541\Debug\AMux.o。\CortexM3\ARM\u GCC\u 541\Debug\CyBootAsmGnu.o arm-none-eabi-ar.exe:正在创建。\CortexM3\arm\u GCC\u 541\Debug\Plotterkode.a arm-none-eabi-gcc.exe-Wl,--启动组-o C:\Users\Vikto\Desktop\plottercode\Plotterkode.cydsn\CortexM3\arm\gcc\u 541\Debug\Plotterkode.elf.\CortexM3\arm\u gcc\u 541\Debug\main.o.\CortexM3\arm\u gcc\u 541\Debug\cyfitter\cfg.o.\CortexM3\arm\u gcc\u 541\cdug\cymetadata.o\CortexM3C:\ProgramFiles(x86)\Cypress\PSoC Creator\4.2\PSoC Creator\PSoC\content\cycomponentlibrary\cycomponentlibrary.cylib\CortexM3\ARM\u GCC\u 541\Debug\cycomponentlibrary.a“-mcpu=cortex-m3-mthumb-L生成的\u Source\PSoC5-Wl,-Map,.\CortexM3\ARM\u GCC\u 541\Debug/Plotterkode.Map-T生成的\u Source\PSoC5\cm3gcc.ld-specs=nano.specs-u printf\u float-Wl,--gc sections-u printf\u float-g-fffunction sections-Og-ffat lto objects-Wl,--end group \CortexM3\ARM\u GCC\u 541\Debug\main.o:在函数
step\u response'中:
C:\Users\Vikto\Desktop\plottercode\Plotterkode.cydsn//plotter\u position.h:125:对
exp'的未定义引用 collect2.exe:错误:ld返回了1个退出状态 “武装”命令-