【发布时间】:2016-01-14 18:46:25
【问题描述】:
我在 Mikroc 中编写了用于直流电机速度控制的代码 但是在构建过程中,它会为所有变量提供错误作为“未声明的标识符”。 任何人都可以帮助我代码中的问题是什么。 我用的是 pic18f8722。 我已经用 Java 编写过代码,但用 c 编写的代码很少 变量和函数的声明有什么问题吗? 下面是代码......
float pid(int actualOut){
error=setPoint-actualOut;
pOut=error*p;
iOut=iOut+error*i;
if(iOut>255)
iOut=255;
else if(iOut<0)
iOut=0;
dOut=(error-lastError)*d;
out = pOut+iOut+dOut;
lastError=error;
if(out>255)
out=255;
else if(out<0)
out=0;
return out;
}
void pwm(short duty){
short dutyCycle=duty;
PWM1_Init(5000);
PWM1_Start();
PWM1_Set_Duty(dutyCycle);
delay_ms(500);
}
Int feedback(){
T0CON=0xC2;
TMR0l=193;
INTCON=0xA0;
TMR1l=0;
TMR1H=0;
T1CON=0x87;
s=1;
while(s==1){}
actualOut=(60*2*TMR1L)/24;
return actualOut;
}
void interrupt(){
T1CON=0x00;
s=0;
}
void main() {
float p=100,i=200,d=10;
int setPoint=100,s=1;
int actualOut=0;
float pOut=0,iOut=0,dOut=0;
float out=16;
int error=0,lastError=0;
short duty;
TRISC = 1;
TRISG = 0;
while(1){
float out = pid(actualOut);
duty=(short)out;
pwm(duty);
int actualOut = feedback();
}
}
【问题讨论】:
-
您似乎遗漏了一些东西。像
#include列表和一些变量声明。你知道当你这样做时:error=setPoint-actualOut在函数pid中,main()声明setPoint并不意味着它神奇地作为pid()中的有效标识符存在,对吧?一本关于 C 的补习书将解释所有这些。 -
这段代码是用 Mikroc 为 pic 微控制器编写的。不需要#include
-
太棒了。更新问题标签以包含特定平台,我之前评论的后半部分仍然有效。
-
我不明白是什么问题。它给所有变量都报错
-
你的问题是你没有声明你正在使用的所有变量——这是编译器告诉你的,也是@WhozCraig 告诉你的。在
pid()主体的前两行中,有 4 个对未声明变量的引用(error、setPoint、pOut和p)。编译器只能告诉你它们没有被声明。