Mikroc中的函数声明
我用Mikroc写了一个直流电机速度控制代码 但在构建过程中,它将错误作为所有变量的未声明标识符。 谁能帮我一下代码中的问题是什么。 我用的是pic18f8722。 我用Java编写过代码,但很少用c编写 变量和函数的声明有问题吗?? 下面是代码Mikroc中的函数声明,c,mikroc,C,Mikroc,我用Mikroc写了一个直流电机速度控制代码 但在构建过程中,它将错误作为所有变量的未声明标识符。 谁能帮我一下代码中的问题是什么。 我用的是pic18f8722。 我用Java编写过代码,但很少用c编写 变量和函数的声明有问题吗?? 下面是代码 float pid(int actualOut){ error=setPoint-actualOut; pOut=error*p; iOut=iOut+error*i; if(iOut>255) i
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();
}
}
由于您使用的是PIC处理器,您应该阅读: 其中详细介绍了如何设置中断处理程序等 其中讨论了PIC上PID软件的概念 其中包含适当的源代码和其他文档 关于pic18f8722 汇编中的源代码显示某些.inc文件包含需要使用的文件 将程序集文件转换为C文件的过程 将是一个优秀的C语言编码复习
注意:这些文件太长,无法插入此处您在定义和pin分配等下方声明函数。 对于pwm功能,您可以将其写入:
void pwm(short);
上述声明可能解决了一些问题,但我仍在努力声明函数的返回类型。您似乎遗漏了一些东西。比如一个包含列表和一些变量声明。当你们这样做的时候,你们知道:在函数pid中,错误=设定点actualOut,主声明的设定点并不意味着它神奇地作为一个有效的标识符存在于pid中,对吗?一本关于C的补救书将解释所有这些。这段代码是为pic微控制器用Mikroc编写的。不需要包容。更新问题标签以包含特定的平台,我之前评论的后半部分仍然有效。我不明白问题出在哪里。它给出了所有变量的错误您的问题是您没有声明您正在使用的所有变量-这是编译器告诉您的,也是@WhozCraig告诉您的。在pid主体的前两行中,有4个未声明变量error、setPoint、pOut和p的引用。编译器只能告诉您它们没有声明。