[C语言] 给结构体的地址空间赋值时出现左值不正确

[复制链接]
376|8
 楼主 | 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++;
}

评论

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

*( (uchar*)&gRxBuff.add + rxCnt ) = tempRx;
| 2018-6-29 08:49 | 显示全部楼层
指针转换不正确
 楼主 | 2018-6-29 09:56 | 显示全部楼层
ayb_ice 发表于 2018-6-29 08:49
指针转换不正确

额,能不能指教下,我的做法是取出地址->地址指针+,然后放到这个指针变量(也就是指针所指向的地址)里,这个方法我在pic里使用过,但不知在51里就编译不过不胜感激啊
| 2018-6-29 10:17 | 显示全部楼层
一叶倾城wwq 发表于 2018-6-29 09:56
额,能不能指教下,我的做法是取出地址->地址指针+,然后放到这个指针变量(也就是指针所指向的地址)里, ...

把gRXBUFF定义帖出来
 楼主 | 2018-7-1 11:18 | 显示全部楼层
chongdongchen 发表于 2018-6-29 10:42
*( (uchar*)&gRxBuff.add + rxCnt ) = tempRx;

一针见血啊,多谢指点,的确是我的地址指针转错了
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /5 下一条

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