搜索
bottom↓
回复: 10

编译GCC程序,提示这个错误 expected ')' before ';' token请帮忙解释一下,谢谢!

[复制链接]

出0入0汤圆

发表于 2008-7-8 10:12:35 | 显示全部楼层 |阅读模式
这个程序是按照刘海成老师《AVR单片机原理及测控工程应用》写的,
用AVR Studio 4.14,嵌入WinAVR-20071221,进行编译的
错误指向26行(有三角标记的一行)

#include <avr/io.h>
#include <util/delay.h>

#define START                                0x08
#define RE_START                        0x10
#define MT_SLA_ACK                        0x18
#define MT_SLA_NOACK                0x20
#define MT_DATA_ACK                0x28
#define MT_DATA_NOACK                0x30
#define MR_SLA_ACK                        0x40
#define MR_SLA_NOACK                0x48
#define MR_DATA_ACK                0x50
#define MR_DATA_NOACK                0x58

//--------------------------------------------
#define Start()                (TWCR=(1<<TWINT|(1<<TWSTA)|(1<<TWEN))
#define Stop()                (TWCR=(1<<TWINT|(1<<TWSTO)|(1<<TWEN))
#define Wait()                {while(!(TWCR&(1<<TWINT)));}
#define TestAck()        (TWSR&0xf8)
#define SetAck()        (TWCR|=(1<<TWEA))
#define SetNoAck()        (TWCR&=~(1<<TWEA))
#define Twi()                (TWCR=(1<<TWINT)|(1<<TWEN))
#define Write8Bit(x) {(TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);}
//--------------------------------------------------
unsigned char i2c_Write(unsigned char Address,unsigned char Wdata)
▲ {        Start();
        Wait();
        Write8Bit(0xa0);
        Wait();
        Write8Bit(Address);
        Wait();
        Write8Bit(Wdata);
        Wait();
        Stop();
        _delay_ms(10);
        return 0;
}

//--------------------------------
unsigned char i2c_Read(unsigned char Address)
{
        unsigned char temp;
        Start();
        Wait();
        Write8Bit(0xa0);
        Wait();
        if (TestAck()!=MT_SLA_ACK) return 0;
        Write8Bit(Address);
        Wait();
        if (TestAck()!=MT_DATA_ACK) return 0;
        Start();
        Wait();
        if (TestAck()!=RE_START) return 0;
        Write8Bit(0xa1);
        Wait();
        if (TestAck()!=MR_SLA_ACK) return 0;
        Twi();
        Wait();
        if (TestAck()!=MR_DATA_NOACK) return 0;
        temp = TWDR;
        Stop();
        return temp;
}

//*-----------------------------------------
void main(void)
{        unsigned char dt,i,j;
        i=1;
        j=2;
        while (i<=10)
                {i2c_Write(unsigned char i,unsigned char j);
                i=i++;
                j=j*2;
                }
        dt=i2c_Read(unsigned char 5);
}




Build started 8.7.2008 at 09:48:45
avr-gcc.exe -I"H:\AVRdpj\TWI\..\..\WinAVR-20071221\avr\include"  -mmcu=atmega16 -Wall -gdwarf-2           -DF_CPU=8000000UL -Os -fsigned-char -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
../main.c: In function 'i2c_Write':
../main.c:26: error: expected ')' before ';' token
../main.c:76: error: expected declaration or statement at end of input
../main.c:76: warning: no return statement in function returning non-void
make: *** [main.o] Error 1
Build failed with 2 errors and 1 warnings...

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2008-7-8 10:37:40 | 显示全部楼层
这样看看呢
#define Start()                TWCR=(1<<TWINT|(1<<TWSTA)|(1<<TWEN)

出0入0汤圆

发表于 2008-7-8 11:13:08 | 显示全部楼层
(1<<TWINT|(1<<TWSTA)|(1<<TWEN)
明显的括号不匹配,编译提示也说了,建议楼主可以用winavr自带的pn来写代码,可以比较清楚地看到匹配情况。

出0入0汤圆

 楼主| 发表于 2008-7-8 12:08:30 | 显示全部楼层
感谢你们的回复。
改成:#define Start()     TWCR=(1<<TWINT|(1<<TWSTA)|(1<<TWEN)
错误提示依旧。

出0入0汤圆

发表于 2008-7-8 12:27:11 | 显示全部楼层
晕。居然没理解我帖子的意思……(-_-!)

出0入0汤圆

发表于 2008-7-8 12:29:35 | 显示全部楼层
4楼莫生气,让LZ自己找吧,估计他刚开始

出0入0汤圆

发表于 2008-7-8 12:31:42 | 显示全部楼层
倒不是生气,而是哭笑不得:)

出0入0汤圆

发表于 2008-7-8 12:47:39 | 显示全部楼层
是啊,改了一次,去了一对括号 ,结果当然还是括号不匹配

出0入0汤圆

发表于 2008-7-8 12:53:43 | 显示全部楼层
改成:#define Start()     TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)

出0入4汤圆

发表于 2008-7-8 15:03:21 | 显示全部楼层
(TWDR=(x);

出0入0汤圆

 楼主| 发表于 2008-7-9 09:42:21 | 显示全部楼层
谢谢各位,问题解决了,少了括号不匹配。
特别感谢yyccaa ,刚刚学习C,所以会犯这样的低级错误。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-28 06:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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