问题:
我定义了这么个结构体:
// 结构体定义区
struct _MODBUS
{
u8 SlaveAddr;//从机地址
u8 TxLength;
u8 TxIndicator;//发射指示器,指向要发送那一位
u8 TxBuff[0xff];//Slave Address , Function , Coil Address , Force Data , Error Check Hi , Error Check Lo
u8 RxAddrAck; //地址确认,表示是信息发给本机的
u8 RxLength; //接收数据长度,
u8 RxFlag; //接收到信号标志,表示USART3开始接收数据了
u8 RxTimer; //接收计时器,如果RxFlag==1并且RxTimer>10,就说明这帧数据接收结束了
u8 RxIndicator; //接收数据指针,当前值表示通过异步通信接收到的数据的个数
u8 RxBuff[0xff];
u8 RxFinish; //接收结束标志
u8 REGISTER[0xff];//MODBUS寄存器
};
struct _MODBUS MODBUS={.SlaveAddr=0x01};
现在的需要是单独修改 REGISTER中的5、6、7,于是先定义指针变量
//注意区别于const Uint8 *p;Uint8 * const p;
Uint8 * pDELAY_R5=&MODBUS.REGISTER[5];//继电器5的单位100ms
Uint8 * pDELAY_R6=&(MODBUS.REGISTER[6]);//单位100ms
Uint8 * pDELAY_POWER=(MODBUS.REGISTER);//单位1s
然后对其进行修改
*pDELAY_R5=10;//单位100ms
*pDELAY_R6=30;//单位100ms
pDELAY_POWER[7]=60;//单位1s,这里就是一分钟
但是执行的结果不对啊,为什么“Uint8 * pDELAY_R5=&MODBUS.REGISTER[5];”这么定义的值没改变?这是怎么回事啊!!!
![](https://i-blog.csdnimg.cn/blog_migrate/f9d8e7a2fc6cf1962ffad9d30f18fad6.png)
解决方法:
其实,REGISTER中5、6的值是改变了的。问题在于显示的是char型的,而10、30对应的ASCII码,不是显示字符