佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1258|回复: 24

C programming error

[复制链接]
发表于 28-3-2009 12:09 AM | 显示全部楼层 |阅读模式
Expecting a basic type 是什么error? 怎样解决它?我是写void main (void) 里面有subfunction,然后这个error就出在subfunction 那里。谢谢。
回复

使用道具 举报


ADVERTISEMENT

发表于 28-3-2009 12:28 AM | 显示全部楼层
你有没有declare你的sub-function?
回复

使用道具 举报

 楼主| 发表于 28-3-2009 11:39 AM | 显示全部楼层

回复 2# geekman 的帖子

有。我知道要在main之前先declare一次。例如:

void ABC (void); // 这个代表declare?

void main (void)
....
...
ABC();
....

void ABC (void)
....
....

对吗?

[ 本帖最后由 cincailo 于 28-3-2009 11:40 AM 编辑 ]
回复

使用道具 举报

发表于 28-3-2009 04:29 PM | 显示全部楼层
沒錯      
  (湊字)
回复

使用道具 举报

发表于 28-3-2009 11:29 PM | 显示全部楼层
看来是你的function里面有些data type没有正确的declare,把你的main()和ABC()的代码放上来吧。
回复

使用道具 举报

 楼主| 发表于 29-3-2009 12:39 PM | 显示全部楼层

回复 5# geekman 的帖子

我的program很长,而且还有一点没写完。不好意思麻烦到你。我是想知道格式有没有错,我的programming 不好。 谢谢!


#include <16F877a.h>
#include <ISD17240.c>
#include <ISD1.c>

#use delay(clock=20000000)
#fuses hs,noprotect,nowdt,nolvp


void main(void)

{
       
        set_tris_a(0b00011111);
        set_tris_b(0b11111111);
        set_tris_c(0b00010000);
        set_tris_d(0xFF);
        set_tris_e(0);
               


do{
if (input(PIN_C0)==0)        //on reset pin on ISD
        {
        ISD_Reset();
        do
                {
                  ISD_PU();
                  delay_ms(50);
                  RdStatus();
                }while((SR0_L&&0x01)||(!(SR1&&0x01)));
       
        SBUF=RD_DevID();
        ClearInt();
        ISD_WR_APC2(0xaf);
        RdAPC();
        }


else if (PORTD==0b01000001)        //alphabet A and record
                {
                do
                {
                  ISD_PU();
                  delay_ms(50);
                  RdStatus();
                }while((SR0_L&&0x01)||(!(SR1&&0x01)));
               
                ClearInt();
                isd_setrec();
               
               
                }
       
else if (PORTD==0b10000001) //playback
                {
                do
                {
                  ISD_PU();
                  delay_ms(50);
                  RdStatus();
                }while((SR0_L&&0x01)||(!(SR1&&0x01)));
               
                ClearInt();
                isd_setplay();       
                }


else if (input(PIN_A4)==1) //erase all
                {
                do
                {
                  ISD_PU();
                  delay_ms(50);
                  RdStatus();
                }while((SR0_L&&0x01)||(!(SR1&&0x01)));
               
                ClearInt();
                EraseAll();       
                }

       
else
        {
        ISD_PD();
        delay_us(1);
        }

}while(1);       

}
回复

使用道具 举报

Follow Us
 楼主| 发表于 29-3-2009 12:40 PM | 显示全部楼层

回复 6# cincailo 的帖子

//ISD17240.c

#define PU                 0x01
#define ISD_STOP       0x02   
#define ISD_RESET      0x03   
#define ISD_CLRINT     0x04   
#define ISD_RDSTATUS   0x05   
#define ISD_RDPLAYPTR  0x06   
#define ISD_PWRDOWN    0x07   
#define PD                   0x07
#define ISD_RDRECPTR   0x08   
#define ISD_RD_DEVID   0x09   
#define ISD_PLAY       0x40   
#define ISD_REC        0x41   
#define ISD_ERASE      0x42   
#define ISD_G_ERASE    0x43   
#define ISD_RDAPC      0x44   
#define ISD_WRAPC      0x45   
#define WR_APC2        0x65   
#define WR_NVCFG            0x46   
#define ISD_LDNVCFG    0x47   
#define ISD_FWD        0x48   
#define ISD_CHKMEM     0x49   
#define ISD_ENEXTCLK   0x4A   
#define ISD_SETPLAY    0x80   
#define ISD_SETREC     0x81   
#define ISD_SETERASE   0x82   


void ISD_Reset(void);
void ISD_PU(void);
void RdStatus(void);
void ISD_PD(void);
void ClearInt(void);
unsigned char RD_DevID(void);
void ISD_WR_NVCFG(void);
void ISD_WR_APC2(unsigned char voiceValue);
void RdAPC(void);
void isd_stop(void);
void EraseAll(void);
void isd_setplay(unsigned int s, unsigned int e);
void isd_setrec(unsigned int s1, unsigned int e1);
unsigned char ISD_SendData(unsigned char data);


#byte PORTA=5
#byte PORTB=6
#byte PORTC=7
#byte PORTD=8
#byte PORTE=9
#bit SS = 5.5
#bit MISO = 7.5
#bit MOSI = 7.4
#bit CLK = 7.3


unsigned char ID, SBUF, APCL, APCH;
unsigned char SR0_L;
unsigned char SR0_H;
unsigned char SR1;


#define address_A 0x010
#define address_B 0x020
#define address_C 0x030
#define address_D 0x040
#define address_E 0x050
#define address_F 0x060
回复

使用道具 举报

 楼主| 发表于 29-3-2009 12:41 PM | 显示全部楼层

回复 7# cincailo 的帖子

//ISD1.c

void ISD_Reset(void)
{
        SS = 0;
        delay_us(5);
        ISD_SendData(ISD_RESET);
        ISD_SendData(0x00);
        SS = 1;
        delay_ms(50);
}

void ISD_PU(void)
{
          SS = 0;
          delay_us(5);
          ISD_SendData(PU);
    ISD_SendData(0x00);
    SS = 1;
        delay_ms(10);
}

void RdStatus(void)  
{

   SS = 0;
   delay_us(5);   
   ISD_SendData(ISD_RDSTATUS);      
   ISD_SendData(0x00);   
   ISD_SendData(0x00);   
   SS = 1;
   delay_ms(10);
   SR0_L = ISD_SendData(ISD_RDSTATUS);      
   SR0_H = ISD_SendData(0x00);   
   SR1 = ISD_SendData(0x00);
   SS = 1;
   delay_ms(10);   
}  


void ISD_PD(void)
{
          SS = 0;
          delay_us(5);
          ISD_SendData(PD);
    ISD_SendData(0x00);
    SS = 1;
        delay_ms(10);
}

void ClearInt(void)
{  
  SS = 0;   
  delay_us(5);
  ISD_SendData(ISD_CLRINT);
  ISD_SendData(0x00);
  SS = 1;
  delay_ms(10);
}

unsigned char RD_DevID(void)
{
SS = 0;
delay_us(5);
ISD_SendData(ISD_RD_DEVID);
ISD_SendData(0x00);
ISD_SendData(0x00);
SS = 1;
delay_ms(10);
SS = 0;
delay_us(5);
SR0_L = ISD_SendData(ISD_RD_DEVID);
SR0_H = ISD_SendData(0x00);
ID = ISD_SendData(0x00);
SS = 1;
delay_ms(10);
return (ID);
}

void ISD_WR_NVCFG(void)
{
SS = 0;
delay_us(5);
ISD_SendData(WR_NVCFG);
ISD_SendData(0x00);
SS = 1;
delay_ms(10);
}



void ISD_WR_APC2(unsigned char voiceValue)
{
SS = 0;
delay_us(5);
ISD_SendData(WR_APC2);
ISD_SendData(0xa8||voiceValue);
ISD_SendData(0x0c);
SS = 1;
delay_ms(10);
ISD_WR_NVCFG();
}


void RdAPC(void)
{
SS = 0;
delay_us(5);
ISD_SendData(ISD_RDAPC);
ISD_SendData(0x00);
ISD_SendData(0x00);
ISD_SendData(0x00);
SS = 1;
delay_ms(10);

SS = 0;
delay_us(5);
SR0_L = ISD_SendData(ISD_RDAPC);
SR0_H = ISD_SendData(0x00);
APCL = ISD_SendData(0x00);
APCH = ISD_SendData(0x00);
SS = 1;
delay_ms(10);

SBUF = SR0_L;
delay_ms(1);
SBUF = SR0_H;
delay_ms(1);
SBUF = APCL;
delay_ms(1);
SBUF = APCH;

}

void isd_stop(void)
{
  SS = 0;
  delay_us(5);
  ISD_SendData(ISD_STOP);
  ISD_SendData(0x00);
  SS = 1;
  delay_ms(100);
}

void EraseAll(void)
{
  SS = 0;
  delay_us(5);
  ISD_SendData(ISD_G_ERASE);
  ISD_SendData(0x00);
  SS = 1;
  delay_ms(100);
}

void isd_setplay(unsigned int s, unsigned int e)
{   
   s=0x010;
   e=0x01F;
   SS = 0;
   delay_us(5);
   
   //isd_clearint();
   //while(!isd_is_free());
   
   ISD_SendData(ISD_SETPLAY);
   ISD_SendData(0x00);   
   ISD_SendData(0x10);   
   ISD_SendData(0x00);
   ISD_SendData(0x1F);
   ISD_SendData(0x00);
   ISD_SendData(0x00);
   SS = 1;
   delay_ms(100);  

   do
                {
                  RdStatus();
                }while((SR0_L&&0x01)||(!(SR1&&0x04)));


}

void isd_setrec (unsigned int s1, unsigned int e1)
{
   s1=0x010;
   e1=0x01F;       
   SS = 0;
   delay_us(5);
   
   ISD_SendData(ISD_REC);
   ISD_SendData(0x00);   
   ISD_SendData(0x10);   
   ISD_SendData(0x00);
   ISD_SendData(0x1F);
   ISD_SendData(0x00);
   ISD_SendData(0x00);
   SS = 1;
   delay_ms(100);  


        do
                {
                  RdStatus();
                }while((SR0_L&&0x01)||(!(SR1&&0x08)));


        isd_stop();

        ClearInt();
}


unsigned char ISD_SendData(unsigned char data)
{
   SPDR = data;
   while((SPSR & 0x80) == 0);  
   data = SPDR;
   return data;
}
回复

使用道具 举报


ADVERTISEMENT

发表于 29-3-2009 03:49 PM | 显示全部楼层
我并没有看到set_tris_a() ~ set_tris_e() 的declaration,你确定在你的header file里面有decalre这些functions?

还有,error是出现在哪一行?
回复

使用道具 举报

 楼主| 发表于 29-3-2009 08:27 PM | 显示全部楼层

回复 9# geekman 的帖子

set_tris_a() 到e 不需declare 的。header file 肯定有,它们是用来set 我的microcontroller PIC I/O pin。Error 出现在几乎每个subfunction,例如 void ISD_Reset (void),还有SS=0, SS=1。Error说undefinite data type 和 expecting a declaration。这两个是比较常出现的error。我是觉得很奇怪,因为看起来都没有declare 错。
回复

使用道具 举报

发表于 30-3-2009 10:27 AM | 显示全部楼层
我想,问题应该是出在这里:
  1. #byte PORTA=5
  2. #byte PORTB=6
  3. #byte PORTC=7
  4. #byte PORTD=8
  5. #byte PORTE=9
  6. #bit SS = 5.5
  7. #bit MISO = 7.5
  8. #bit MOSI = 7.4
  9. #bit CLK = 7.3
复制代码
我查阅过C/C++ language reference,并没有发现任何关于#bit,#byte,#use和#fuses 的信息,请向提供这段code的人查询这些directive的正确使用方法。

根据我的观察,你的code是针对某些customized hardware而编写的customized library,应该会有些特定的header file,可能你漏了哪些header file 没有 include 到。

[ 本帖最后由 geekman 于 30-3-2009 10:29 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 30-3-2009 12:21 PM | 显示全部楼层

回复 11# geekman 的帖子

不好意思,我应该提供你一些资料。我是用CCS C compiler, 给你一个网址,是这个C compiler 的manual。对咯, 你很厉害,我就是写给一个芯片的 microcontroller (PIC, peripheral interface controller) from Microchip Technology。

http://www.ccsinfo.com/downloads/ccs_c_manual.pdf 这个是最新的manual,2009,我用的2001manual 找不到网址,如果没错应该是
http://web.media.mit.edu/~earroyo/voice_chip/CCSC.pdf

我很肯定你说的那些代码没问题,因为我写过给简单的功能,都是用那些代码,没有问题。

谢谢!
回复

使用道具 举报

发表于 30-3-2009 01:58 PM | 显示全部楼层
undefined data type 指的是你有 variable 没有正确的指明其 data type. 例如:
  1. myVar = 100; //undefined data type, myVar could be char, int, float, long, double, etc...
  2. //-----------------------
  3. int myVar = 100; //myVar is defined as integer
复制代码
我发现你的code里面有些来处不明的variable,例如 PIN_C0 ,由于你没有把你的 header file 放上来,我也不知道这些是不是原因,现在只能在黑暗中拍苍蝇 - 随便乱拍。

至于expecting a declaration 很明显的是你没有在使用某个variable 或者 function 之前先 declare 好来。

我建议你查询你以前那些可以使用的code,确定你已经include了所有必须的header file。
回复

使用道具 举报

发表于 30-3-2009 02:00 PM | 显示全部楼层
  1. unsigned char ISD_SendData(unsigned char data)
  2. {
  3.    SPDR = data;
  4.    while((SPSR & 0x80) == 0);  //SPSR or SPDR??
  5.    data = SPDR;
  6.    return data;
  7. }
复制代码
请检查你所有的variable名字的正确性。

[ 本帖最后由 geekman 于 30-3-2009 02:03 PM 编辑 ]
回复

使用道具 举报

发表于 30-3-2009 02:08 PM | 显示全部楼层
#define ISD_STOP       0x02

void isd_stop(void);

可能会造成混淆,根据你给我的manual,这个compiler by default 是 Case Insensitive 的。
回复

使用道具 举报

发表于 30-3-2009 02:28 PM | 显示全部楼层
由于你的compiler和library是customized的,我无法执行你的code,也无法直接的知道到底是哪一行哪一个variable/function出错,我实在无法准确的帮你找出你的问题所在。唯一能够确定的是:

1)检查你的variable name,确定不要让function name 和 variable anme/define name起冲突,也确定你的functions / variables 有正确的 declade。

2)确定你有include所有必须的header files.

我能帮你的就这么多了。
回复

使用道具 举报


ADVERTISEMENT

发表于 30-3-2009 02:49 PM | 显示全部楼层
楼主所写的是embedded c,ccs compiler的library并不时ansi c standard的,你可以去电技分区,单晶片那里找pic大大,他本人是microchip和css compiler的developer,应该可以帮到你
回复

使用道具 举报

 楼主| 发表于 30-3-2009 06:24 PM | 显示全部楼层

回复 16# geekman 的帖子

谢谢你。。。 你已经帮了我很多,让我明白了一些东西。 好,我会再努力!
回复

使用道具 举报

 楼主| 发表于 30-3-2009 06:26 PM | 显示全部楼层

回复 17# retnuoc 的帖子

  谢谢你的提议。 原以为问问programming格式所以就在这里发帖。
回复

使用道具 举报

 楼主| 发表于 31-3-2009 08:52 AM | 显示全部楼层

回复 15# geekman 的帖子

谢谢你。。。 我终于都compile到了!  问题真的是出在case insensitive,我太粗心了 。谢谢你提点。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 15-12-2025 03:31 AM , Processed in 0.160316 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表