打印

keil编程出现left side of asn-op not a lvalue 错误

[复制链接]
19137|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hcwbruce|  楼主 | 2007-5-23 16:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 在keil uvision2中用C语言对AT89S52单片机进行编程。
在程序开头,已经有定义变量:
static char digital_mem=4;        
static char bit_mem=0;      
static char bit_key_val;    

在主程序中对上面三个变量根据不同情况进行了重新赋值,然后有如下程序:
    if((digital_mem<4)&&(bit_mem==0))
        {
         digital_buf[5]=digital_buf[digital_mem]; //语句1
         digital_buf[digital_mem]=digital_buf[4]; //语句2
         digital_buf[4]=digital_buf[5];          //语句3
         }
        else if((digital_mem==4)&&(bit_mem==1))
            {
             digital_buf[5]=digital_buf[digital][bit_key_val]];                            //语句4
             digital_buf[digital][bit_key_val]]=digital_buf[4];                        //语句5
             digital_buf[4]=digital_buf[5];//语句6
             }
            else {;}
完成整个程序的编写后,执行“重新构造所有目标”,就出现了5个“left side of asn-op not a lvalue ”错误,错误出现在上面程序中的语句2~6,语句1没出错。请问这句错误提示的意思是什么?程序得怎样修改呢?请各位大侠帮小弟解决这个问题。先谢谢了!!!!

相关帖子

沙发
Airwill| | 2007-5-23 16:45 | 只看该作者

digital_buf 如何定义的呢

好象又是两维, 又是一维的!

使用特权

评论回复
板凳
ww4u| | 2007-5-23 19:39 | 只看该作者

digital_buf[digital][bit_key_val]]?

代码中两次出现digital_buf[digital][bit_key_val]],是否有笔误

使用特权

评论回复
地板
hcwbruce|  楼主 | 2007-5-24 12:05 | 只看该作者

数组的定义

    涉及到的两个数组的定义如下:
char code digital[16]={1,2,3,0,4,5,6,1,7,8,9,2,0,0,0,3};
char data digital_buf[6]={0x00,0x00,0x00,0x00,0x0a,0x00};

   数组是一维的。另外,关于ww4u提到的笔误,在上面我给出的帖子中确实是有错误,多了一个“]”,但,我的程序中没有这个错误,昨天复制粘贴进来,就有错了,不知道怎么会这样。
   程序应该是:
 if((digital_mem<4)&&(bit_mem==0))
        {
         digital_buf[5]=digital_buf[digital_mem]; //语句1
         digital_buf[digital_mem]=digital_buf[4]; //语句2
         digital_buf[4]=digital_buf[5];          //语句3
         }
        else if((digital_mem==4)&&(bit_mem==1))
            {
             digital_buf[5]=digital_buf[digital][bit_key_val]];                            //语句4
             digital_buf[digital][bit_key_val]]=digital_buf[4];                        //语句5
             digital_buf[4]=digital_buf[5];//语句6
             }
            else {;}
    
    谢谢上面两位提出宝贵的意见!!!!

使用特权

评论回复
5
hcwbruce|  楼主 | 2007-5-24 12:19 | 只看该作者

发帖出现错误!!!

我发帖子后,这个发帖的平台总会自动给程序中的数组“digital”后面加上一个“]”,变成了下面的程序:

 digital_buf[5]=digital_buf[digital][bit_key_val]];                            //语句4
             digital_buf[digital][bit_key_val]]=digital_buf[4];                        //语句5


即上面所显示的程序有错,应该去掉紧跟“digital”之后的“]”。语句4的等号右边和语句5等号左边都是取数组digital_buf中下标为digital[bit_key_val]的元素。   

使用特权

评论回复
6
hcwbruce|  楼主 | 2007-5-24 19:47 | 只看该作者

问题解决了!

    我的程序已经修改好了。上面所说的程序,我没做修改。因为程序还有其他错误,我先修改了其他的,随之,上面的程序可以编译通过,迎刃而解!
总结一下程序编译时遇到错误及其解决方法:
1.我在程序开始处对一些被调用的函数进行先声明,连外部中断函数也声明了,
声明了“void time_interrupt() interrupt 1;”编译不通过,有错!把该声明删除,没错了!

2.错误:无法辨识“XBYTE”。“XBYTE”是定义外部RAM寻址。程序开始处有加入“#include"ABSACC.H"”,但编译不通过,我把keil安装目录里的文件ABSACC.H复制粘贴到文件夹“Atmel”中,问题解决了!

3.“unprintable character 0xAC skipped”错误:程序中出现了无法辨识字符,应该是有超过了ASCII码128的字符。我推测是加中文注释后又更改注释,对中文字符删除不干净,导致错误。因此在错误提示“near {”的提示下找到错误处,将其附近的空白处、字符删除掉,在英文输入状态重新输入程序。错误排除了!

4.通过上面三步,原来编译出现的“*”乘号不能辨识,“left side of asn-op not a lvalue” 错误随之解决!
   总结一下,希望对某些像我这样的菜鸟有益处。

   顺便说一下,我是一名单片机热爱者,希望可以结识到一些热爱单片机的人,共同进步!我的QQ是83248615。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝