我目前正在为学校项目开发 pid 调节器。由于电晕已经关闭了学校,我们无法获得任何硬件来测试它。所以我想在微处理器(PSoC5LP)上模拟 PID 调节器。所以我正在实现一个返回所选直流电机的阶跃响应的函数。
当我找到传递函数“(-3.47*exp(-6.36*s)+3.47))”的输出时,如果我在代码中手动定义“s”的值,我会得到正确的结果。但是当我在代码“未定义对“exp”的引用中将 s 设置为递增时。
问题似乎是我不能在循环中运行 exp 而增加它。在另一个项目中尝试过,唯一发生的事情是循环运行 10 次并打印出 exp() 以及循环运行的 nr 次(不起作用)
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;
};
因此,如果我在循环中手动选择 S,它会起作用,但如果它增加它就会停止。我试图使用另一个变量并增加它,但它仍然不起作用
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”已被定义为一个值
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);
};
这行得通
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;
};
不这是错误:Build error: undefined reference to 'exp'
编译器输出的日志
--------------- 构建开始:04/28/2020 01:34:42 项目:Plotterkode,配置:ARM GCC 5.4-2016-q2-update 调试 ------ --------- 代码生成步骤是最新的。编译步骤是最新的,不需要做任何工作。arm-none-eabi-ar.exe -rs .\CortexM3\ARM_GCC_541\Debug\Plotterkode.a .\CortexM3\ARM_GCC_541\Debug\cy_em_eeprom.o .\CortexM3\ARM_GCC_541\Debug\CyDmac.o .\CortexM3\ARM_GCC_541\ Debug\CyFlash.o .\CortexM3\ARM_GCC_541\Debug\CyLib.o .\CortexM3\ARM_GCC_541\Debug\cyPm.o .\CortexM3\ARM_GCC_541\Debug\CySpc.o .\CortexM3\ARM_GCC_541\Debug\cyutils.o . \CortexM3\ARM_GCC_541\Debug\pc_uart.o .\CortexM3\ARM_GCC_541\Debug\pc_uart_PM.o .\CortexM3\ARM_GCC_541\Debug\pc_uart_INT.o .\CortexM3\ARM_GCC_541\Debug\pc_uart_BOOT.o .\CortexM3\ARM_GCC_541\Debug \pc_uart_IntClock.o .\CortexM3\ARM_GCC_541\Debug\isr_pc_uart.o 。step_respons':
C:\Users\Vikto\Desktop\plottercode\Plotterkode.cydsn/./plotter_position.h:125: undefined reference to
exp' collect2.exe:错误:ld 返回 1 退出状态命令“arm-none-eabi-gcc.exe”失败,退出代码为“1”。--------------- 构建失败:04/28/2020 01:34:42 ---------------