打印
[C语言]

给结构体的地址空间赋值时出现左值不正确

[复制链接]
895|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一叶倾城wwq|  楼主 | 2018-6-29 00:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用的51单片机,以下是出现问题的代码,请各位帮看看,结构体已在头文件里定义过:
#include "receive.h"

gRXBUFF gRxBuff;

uchar tempRx = 0;  //临时接收变量
uchar rxCnt = 0;   //接收计数器/指针

/*********************************************
FunctionName: UART
FunctionInfo: 52单片机的串口接收中断
Input:        no
Output:       no
注:兼容51 使用的定时器2定时器2做波特率发生器若改用51得注意   
**********************************************/
void UART() interrupt 4
{
  ES = 0;  //暂时关闭串口中断允许位
  RI = 0;  //接收中断标志位 由软件清零

  tempRx = SBUF;
  gRxBuff.add =  tempRx;  //这样才正确
  //(gRxBuff.add + sizeof(uchar)*8) = tempRx;  //左值不正确-> left side of asn-op not an lvalue
  //*( *(uchar)gRxBuff.add + rxCnt ) = tempRx;   //左值不正确
  //*( *(&gRxBuff.add) +rxCnt) = tempRx;           //左值不正确
  rxCnt++;
}

评论
一叶倾城wwq 2018-7-2 11:01 回复TA
多谢各位前辈的提醒,目前已经调试OK,使用MODBUS的数据格式都能接收到正确的数据了,谢谢啦! 
一叶倾城wwq 2018-6-29 09:53 回复TA
@xyz549040622 :不用指针就只有用数组了,那能解决这个问题么,把寄存器里的值放到结构体里去,每来一次放一个,有点不想使用数组,多谢提醒啦 
xyz549040622 2018-6-29 08:04 回复TA
51中最好不要频繁使用指针,尤其是中断中。 

相关帖子

来自 2楼
chongdongchen| | 2018-6-29 10:42 | 只看该作者
本帖最后由 chongdongchen 于 2018-6-29 10:44 编辑

*( (uchar*)&gRxBuff.add + rxCnt ) = tempRx;

使用特权

评论回复
板凳
ayb_ice| | 2018-6-29 08:49 | 只看该作者
指针转换不正确

使用特权

评论回复
地板
一叶倾城wwq|  楼主 | 2018-6-29 09:56 | 只看该作者
ayb_ice 发表于 2018-6-29 08:49
指针转换不正确

额,能不能指教下,我的做法是取出地址->地址指针+,然后放到这个指针变量(也就是指针所指向的地址)里,这个方法我在pic里使用过,但不知在51里就编译不过不胜感激啊

使用特权

评论回复
5
ayb_ice| | 2018-6-29 10:17 | 只看该作者
一叶倾城wwq 发表于 2018-6-29 09:56
额,能不能指教下,我的做法是取出地址->地址指针+,然后放到这个指针变量(也就是指针所指向的地址)里, ...

把gRXBUFF定义帖出来

使用特权

评论回复
6
一叶倾城wwq|  楼主 | 2018-7-1 11:18 | 只看该作者
chongdongchen 发表于 2018-6-29 10:42
*( (uchar*)&gRxBuff.add + rxCnt ) = tempRx;

一针见血啊,多谢指点,的确是我的地址指针转错了

使用特权

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

本版积分规则

80

主题

1341

帖子

11

粉丝