• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 牛人業話 > 《C與指針》讀書筆記九

    《C與指針》讀書筆記九

    作者: 時間:2016-08-22 來源:網絡 收藏

      之所以在語言中占據很大分量,是因為有很大的靈活性。以結構體結合確實為程序的編寫提供了一把鋒利無比的寶劍。在有些資料上介紹結構體是多種數據集合,也就是一個結構體可以包含若干種不同類型的數據。不同類型的數據恰可以和客觀事物的不同屬性結合,用于描述客觀事物非常高效方便。

    本文引用地址:http://www.czjhyjcfj.com/article/201608/295845.htm

      #define RTX_MAX 50

      #define UART_TIME_LIMT 5

      typedef struct UART_TYPE

      {

      unsigned char RX_buf[RTX_MAX];

      unsigned char RX_count;

      unsigned char TX_buf[RTX_MAX];

      unsigned char TX_count;

      unsigned char TX_Len;

      unsigned char flag;

      unsigned char timer; //判斷一幀數據是否結束判斷

      }UART_TYPE;

      enum OM_FLAGE {NO_RE_ONE_FRAM,REC_ONE_FRAM};

      以上是一個串口管理信息的數據結構,RX_buf[RTX_MAX]、TX_buf[RTX_MAX] 是發送接收數據緩沖。RX_count 、TX_count接收發送數據計數器。TX_Len 發送數據總長度。flag數據接收完成標志。timer接收數據起始計數器。

      結構體定義相當于一個數據集合模板。當需要該數據結構時只需聲明一個即可。

      UART_TYPE UART1 = {

      {0,0},

      0,

      {0,0},

      0,

      0,

      NO_REC_ONE_FRAM,

      0

      };

      在編程中管理也非常方便,如果需要為串口設計一個數據使用,UART_TYPE UART;即可實現。在程序中使用也非常方便,比如:

      //讀取多個寄存器

      if(UART1.RX_buf[1]==0x03)

      {

      if(readMuliReg( )==0)

      {

      UART1_Clear_Buf( );

      return;

      }

      else

      {

      goto RETURN_ERR;

      }

      }

      指針與結構體的結合,在解析MODBUS協議時非常高效。借用一位同事話是“對內存格式化”。也就是用結構體指針對MODBUS報文分析。

      //讀多個寄存器

      typedef struct MODELBUS03CMD

      {

      unsigned char targetADD; //目標地址

      unsigned char CMD; //命令字

      unsigned int regADD; //寄存器地址

      unsigned int regNum; //寄存器數量

      }MODELBUS03CMD;

      這是一個03命令的報文頭結構。在程序使用方法是這樣

      MODELBUS03CMD *pModelBus03;

      pModelBus03 = UART1.RX_buf;

      REGNumber = pModelBus03->regNum;

      regADD = pModelBus03->regADD;

      使用pModelBus03指針指向接收數據緩沖區,很容易提取了regNum寄存器數量以及regADD寄存器地址。



    關鍵詞: C 指針

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 巨鹿县| 留坝县| 巴彦县| 天气| 海门市| 光山县| 江都市| 宁波市| 岳阳县| 本溪| 抚顺市| 海宁市| 井冈山市| 聊城市| 通渭县| 将乐县| 台中市| 灌南县| 陇西县| 五大连池市| 绵竹市| 长武县| 宁安市| 来安县| 陇川县| 乌兰浩特市| 汨罗市| 竹溪县| 高安市| 西乌珠穆沁旗| 潼南县| 元氏县| 新野县| 宣城市| 水富县| 宣化县| 镇赉县| 南召县| 崇州市| 永定县| 介休市|