您的位置 首页 软件

《C与指针》读书笔记四

数组是C语言重要的概念,指的是相同类型、地址连续的一组数。一般是由数组名誉下标组成。在MODBUS通讯过程中使用数组作为寄存器的实现方式再合适不过了。虽然在实际情况中因为每个变量的类型不尽相同,但

  数组是C言语重要的概念,指的是相同类型、地址接连的一组数。一般是由数组声誉下标组成。在MODBUS通讯过程中运用数组作为寄存器的完结方法再适宜不过了。尽管在实践情况中由于每个变量的类型不尽相同,可是为了归一化处理问题,只需挑选容量大的类型。比方一组实践参数中有char型数据又有int 数据,那就悉数运用int类型。尽管糟蹋了一些RAM空间,可是为通讯程序规划简化发明了条件,也为其他模块的规划奠定了根底。

  咱们摘取搭档的拜见一个比方:

  #define SYS_RUN_PARA_ADD_BASE 0x1000

  enum runParaAdd {

  runStateAdd, //运转状况

  runStageAdd, //运转阶段

  heatTempAdd, //加热温度

  HTBackTempAdd, //备份温度

  PT_4_20maAdd, //4-20mA

  DIPAdd, //跳线及长途班输入

  OPTAdd, //光耦

  relayAdd, //继电器数据

  runModeAdd, //运转加热形式,翻开或许封闭

  startTallAdd, //发动塔

  errAdd, //过错寄存器

  YCComAdd,

  };

  extern int runPara[YCComAdd+1];

  剖析以上代码:int runPara[YCComAdd+1]; 界说了个数组,而且运用枚举量YCComAdd加1界说了数组的空间。YCComAdd究竟是多少,拜见枚举量runParaAdd界说,YCComAdd应该是常量11,11加1等于12。句子int runPara[YCComAdd+1]等价于runPara[12]。

  体系会在RAM区分配一个整型的数组,空间巨细是12个整型。在VC6.0中应该是48个字节的空间。在规划通讯程序时直接依据地址能够拜访该数组。

  RMESDATAHead *pMes;

  unsigned int regADD,crc; //寄存器地址

  unsigned int REGNumber; //数据数量

  unsigned char i;

  unsigned int j;

  pMes = UART0.RX_buf;

  if(pMes->CMD!=0x03) return;

  regADD = pMes->regADD;

  REGNumber = pMes->REGNumber;

  i=0;

  UART0.TX_buf[i++] = 0x01;

  UART0.TX_buf[i++] = 0x03;

  UART0.TX_buf[i++] = (unsigned char)(REGNumber*2);

  //读取运转参数

  if((regADD>=SYS_RUN_ADD_BASE)&&(regADD<=(SYS_RUN_ADD_BASE+SYS_RUN_STATE_ADD)))

  {

  regADD = regADD&0x00ff;

  for(j=0;j

  {

  UART0.TX_buf[i++]=SYS_RUN_PARA[regADD+j]>>8; UART0.TX_buf[i++]=SYS_RUN_PARA[regADD+j]& 0x00FF;

  }

  }

  //生成CRC校验

  crc = out_crc(UART0.TX_buf, i);

  UART0.TX_buf[i++]= crc>>8;

  UART0.TX_buf[i++]= crc & 0x00FF;

  SSendTxBufUart0( i );

  这两条句子便是 UART0.TX_buf[i++]=SYS_RUN_PARA[regADD+j]>>8; UART0.TX_buf[i++]=SYS_RUN_PARA[regADD+j]& 0x00FF;

  运用数组完结通讯程序。只需根本数据规划合理,MODBUS通讯程序十分简略。尽管在界说变量时糟蹋一些RAM,但在编写程序时能够省却很多的代码。

  一维数组运用最常见,地址是线性的,十分简略。很简单画出内存模型。

  比方:int arrary[10];

  由于咱们并没有初始化arrary数组,所以值是随机的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/115170.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部