【问题标题】:Function declaration in MikrocMikroc 中的函数声明
【发布时间】: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 个对未声明变量的引用(errorsetPointpOutp)。编译器只能告诉你它们没有被声明。

标签: c mikroc


【解决方案1】:

由于您使用的是 PIC 处理器,因此您应该阅读: http://www.microcontrollerboard.com/pic_interrupt.html 其中详细说明了如何设置中断处理程序等

http://ww1.microchip.com/downloads/en/AppNotes/00937a.pdf 其中讨论了 PIC 上的 PID 软件的概念

http://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en020434 其中包含适当的源代码和其他文档 关于 pic18f8722

源代码(汇编)显示需要使用某些 .inc 文件(#include 文件)。

汇编文件转换为C文件的过程 将是一个很好的 C 编码复习

注意:这些文件太长了,无法在此处插入

【讨论】:

    【解决方案2】:

    您在#define 和引脚分配等下方声明该函数。 对于函数pwm,你可以写成:

    void pwm(short);
    

    上述声明可能会解决一些问题,但我仍在努力声明函数的返回类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多