原帖:https://www.eefocus.com/luo_xinli/blog/14-12/307273_752a5.html 有的同事偏好使用结构体,有的同事偏好使用数组。结构体方便系统数据的管理,数组在做104协议通讯、MODBUS协议通讯时方便。这是我的一位同事总结的结论。但是我的这位同事仍旧偏好使用数组。这个在很大程度上影响了全公司。我们来摘取他的代码来研究一下。
int setPara[5];]; #define SYS_SET_PARA_ADD_BASE 0x2000 enum setParaAdd {
workTimeAdd, //系统吸附时间地址
regerTimeAdd, //系统再生时间地址
pressTimeAdd, //均压时间地址
stopTimeAdd, //停机时间
gateTypeAdd //阀门属性Í
};
以上代码是定义了一个setPara的数组,整型数据。setParaAdd 是枚举类型,
workTimeAdd、 regerTimeAdd、 pressTimeAdd、 stopTimeAdd、 gateTypeAdd就是常量0-5.刚好用于setPara下标。
我们来看看他的通讯程序中的一段代码:
if((startAdd>=SYS_SET_PARA_ADD_BASE)
&&(startAdd<=(SYS_SET_PARA_ADD_BASE+gateTypeAdd)))
{
startAdd =(unsigned char)( startAdd &0x00ff );
for(j=0;j<RegNumber;j++)
{
setPara[startAdd+j]= UART0.RX_buf[i++];
setPara[startAdd+j]= (setPara[startAdd+j]<<8) + UART0.RX_buf[i++];
}
}
以上代码很简单的完成了对 setPara数据的接收。这个系统使用的是MODBUS协议。SYS_SET_PARA_ADD_BASE是配置参数的基地址, workTimeAdd、 regerTimeAdd、 pressTimeAdd、 stopTimeAdd、 gateTypeAdd其实就是参数的偏移地址。这段代码很简洁。但是确实完成了对任意寄存器的写功能。所以数组在通讯任务代码的编写非常有用。
我们再来看看在其他任务中,数组的应用
setPara[workTimeAdd] =300;
setPara[regerTimeAdd] =240;
setPara[pressTimeAdd] =5;
setPara[stopTimeAdd] =30;
setPara[gateTypeAdd]=positive;
write_24(0x00, &setPara,sizeof(setPara));
这种写法体现了数组与枚举的联合使用的魅力,就是代码不太容易编写错误,代码编写效率比较高。
|