|
查看: 1258|回复: 24
|
C programming error
[复制链接]
|
|
|
|
Expecting a basic type 是什么error? 怎样解决它?我是写void main (void) 里面有subfunction,然后这个error就出在subfunction 那里。谢谢。 |
|
|
|
|
|
|
|
|
|
|
发表于 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);
} |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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;
} |
|
|
|
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
我想,问题应该是出在这里:- #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
复制代码 我查阅过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
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 30-3-2009 01:58 PM
|
显示全部楼层
undefined data type 指的是你有 variable 没有正确的指明其 data type. 例如:- myVar = 100; //undefined data type, myVar could be char, int, float, long, double, etc...
- //-----------------------
- 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
|
显示全部楼层
- unsigned char ISD_SendData(unsigned char data)
- {
- SPDR = data;
- while((SPSR & 0x80) == 0); //SPSR or SPDR??
- data = SPDR;
- return data;
- }
复制代码 请检查你所有的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.
我能帮你的就这么多了。 |
|
|
|
|
|
|
|
|
|
|
发表于 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,我太粗心了 。谢谢你提点。。 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|