float Get_MainAngle(float angle)
{
float a;
a = fmod_custom((float)angle,(float)(2*pi));
return a >= 0? a:a+2*pi;
}
void Set_PhaseVolatge(float uq,float ud,float angle)
{
angle = Get_MainAngle(angle+zero_electric_angle);
//帕克逆变换
ualpha=ud*cos(angle)-uq*sin(angle);
ubeta=uq*cos(angle)+ud*sin(angle);
//克拉克逆变换
ua=ualpha+volatge_supply/2;
ub=(sqrt(3)*ubeta-ualpha)/2+volatge_supply/2;
uc=(-ualpha-sqrt(3)*ubeta)/2+volatge_supply/2;
Set_PWM(ua, ub, uc);
}
报错如下:
d:/application/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./User/main.o: in function `Set_PhaseVolatge':
D:\Project\MRS_project\CH32V003\CH32V003F4U6_VISION1\obj/../User/main.c:141: undefined reference to `cos'
d:/application/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: D:\Project\MRS_project\CH32V003\CH32V003F4U6_VISION1\obj/../User/main.c:141: undefined reference to `sin'
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:56: CH32V003F4U6_VISION1.elf] Error 1
这样的错误在程序编写过程中无错误提示,一经编译才发现有错误,根据报告来看是没有引用函数,可是已经引用了math.h库,而且多次修改发现再帕克逆变换之前直接对angle赋值不会出现这样的问题。菜菜求救,可提供完整代码。
程序中 fmod_custom函数是自己写的浮点数取余,经过验证无问题。