预期宣言

时间:2013-05-02 10:58:51

标签: c if-statement declaration code-composer

这是我的第一个问题(编码很新)所以会尽量包含尽可能多的信息'现在我很难过!

我正在尝试编写代码,以创建符合用户输入规范的butterworth过滤器。我正在使用Code Composer 4。

谷歌远离54个错误我有一个持续1左:

"expected a declaration" on line 27: if (n=1 && hpf=0)

我有三重检查大括号,任何想法?

编辑:

嗨,再次感谢所有的帮助。从那时起已经对旧问题进行了分类,但又重新打了一堵砖墙;代码不会写入(或创建文件被删除)coffic.cof文件。没有出现错误,但文件保持不变。有什么想法吗?

P.S。抱歉以前的代码布局 - 希望这更好:

#include "dsk6713_aic23.h"      //codec-DSK support file
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;  //set sampling rate
# include <stdio.h>
# include <math.h>
# include <stdlib.h> 
#define pi 3.1415927
#include "coffic.cof"

void main()
{
    double hpf, fs, fco, atn, fat, tp, k, ad, m, n, o, da, db, dc;
    FILE *fp;
    int c, d, e, f, g, h, i, q, r, s, t, u, v;
    hpf = 0;            //for a high-pass filter input 1, for a low-pass filter input 0
    fs = 8000;          //input samping frequency here
    fco = 2400;         //input cut-off frequency here
    atn = 17;           //input attenuation (dB) here
    fat = 3500;         //input the frequency of attenuation here
    tp = 1/fs;
    k = tan(pi*fco*tp);
    ad = tan(pi*fat*tp);
    m = (log10((pow(10,(atn/10)))-1))/(2*(log10(ad/k)));
    o = abs(m);
    n = ceil(o);

    da = 1.414;
    c = (pow(2,15)*k*k/(1+da*k+k*k));
    d = (pow(2,15)*2*k*k/(1+da*k+k*k));
    e = (pow(2,15)*k*k/(1+da*k+k*k));
    q = (pow(2,15)*(2-2*k*k)/(1+da*k+k*k));
    r = (pow(2,15)*(-1+k-k*k)/(1+da*k+k*k));

    fp = fopen("U:\DSK6713\Ivo\CSP\coffic.cof", "w");
    if (fp == NULL)
    {
        printf("Error. Unable to open coffic.cof");
        exit(0);
    }

    fprintf(fp, "int a[3]={%d, d%, %d};\n", c, d, e);
    fprintf(fp, "int b[3]={1, d%, %d};\n", q ,r);
    fprintf(fp, "int x[3]={0,0,0};\nint y[3]={0,0,0};\n");

    fflush(fp);

    fclose(fp);

    comm_intr();                   //init DSK, codec, McBSP
    while(1);                      //infinite loop
}

interrupt void c_int11()         //interrupt service routine 
{
    short input;
    FILE *fp;
    fp = fopen("U:\DSK6713\Ivo\CSP\coffic.cof", "r");
    if (fp == NULL)
    {
        printf("Error. Unable to open coffic.cof");
        exit(0);
    }

    fclose(fp);

    x[2]=x[1];
    x[1]=x[0];
    y[2]=y[1];
    y[1]=y[0];

    input=input_sample();
    x[0]=input;

    y[0]=a[0]*x[0]+a[1]*x[1]+a[2]*x[2]+b[1]*y[1]+b[2]*x[2];     

    y[0]=y[0]>>15;                      
    input=(short)y[0];
    output_sample(input);   //output data  
    return;
}

3 个答案:

答案 0 :(得分:0)

此外,您的程序看起来缺少main()函数,代码位于顶层(在任何函数之外),这是不允许的。

主程序应该在一个名为:

的函数中
int main(void)

因为这是执行将开始的地方。

此外,C中的比较运算符拼写为==。单=是作业。

答案 1 :(得分:0)

您正在尝试在main之外执行一些代码,而不是声明为函数。您需要将所有代码放在main中。在第27行,您已关闭main并且未将您的下一个语句声明为函数。所以

#include "dsk6713_aic23.h"      //codec-DSK support file
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;  //set sampling rate
# include <stdio.h>
# include <math.h>
# include <stdlib.h> 
#define pi 3.1415927

int main(int argc, char *argv[])
{
 double hpf, fs, fco, atn, fat, tp, k, ad, m, n, o, da, db, dc;
 int c, d, e, f, g, h, i, q, r, s, t, u, v;
 hpf = 0;            //for a high-pass filter input 1, for a low-pass filter input 0
 fs = 8000;          //input samping frequency here
 fco = 2400;         //input cut-off frequency here
 atn = 17;           //input attenuation (dB) here
 fat = 3500;         //input the frequency of attenuation here
 tp = 1/fs;
 k = tan(pi*fco*tp);
 ad = tan(pi*fat*tp);
 m = (log10((pow(10,(atn/10)))-1))/(2*(log10(ad/k)));
 o = abs(m);
 n = ceil(o);


 if (n == 1 && hpf == 0)
 {
  int     a[2]={c,d};
  int     b[2]={1,q};
  int     x[2]={0,0};
  int     y[2]={0,0};
  c = (pow(2,15)*k/(k+1));
  d = (pow(2,15)*k/(k+1));
  q = (pow(2,15)*(1-k)/(k+1));
 }

 else if (n == 2 && hpf == 0)
 {
  da = 1.414;
  int     a[3]={c,d,e};
  int     b[3]={1,q,r};
  int     x[3]={0,0,0};
  int     y[3]={0,0,0};
  c = (pow(2,15)*k*k/(1+da*k+k*k));
  d = (pow(2,15)*2*k*k/(1+da*k+k*k));
  e = (pow(2,15)*k*k/(1+da*k+k*k));
  q = (pow(2,15)*(2-2*k*k)/(1+da*k+k*k));
  r = (pow(2,15)*(-1+k-k*k)/(1+da*k+k*k));
 }

 else
 {
  puts("Sorry, the parameters you have entered cannot be met by a Butterworth Filter of order 6 or less.");
 }

  comm_intr();                   //init DSK, codec, McBSP
  while(1);                      //infinite loop

} // closing brace of main

interrupt void c_int11()         //interrupt service routine 
{
 short input;

 x[1]=x[0];
 y[1]=y[0];

 input=input_sample();
 x[0]=input;

 y[0]=a[0]*x[0]+a[1]*x[1]+b[1]*y[1];     

 y[0]=y[0]>>15;                      
 input=(short)y[0];
 output_sample(input);   //output data  
 return;
}

你不是在比较,而是分配。改为

if (n == 1 && hpf == 0){ }

同样少hint

如果你执行

if( n = 1 )

这是一个有效的表达式,但是一个赋值,在这种特殊情况下会返回true,但它总是会返回true。 而

if ( n == 1)

是一个比较,如果n等于1,则产生true,如果n不等于1,则产生假。

答案 2 :(得分:0)

在n = ceil(o)之后做的花括号是什么?

您正在结束main函数,它将if语句留在函数范围之外。

删除那个花括号,代码应该有效。

此外,在if语句中使用==而不是=。 =将为您的变量赋值,顺便说一下,它们总是返回true,==实际比较它们。