新聞中心

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

        《C與指針》讀書筆記九

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

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

        本文引用地址:http://www.104case.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 指針

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 监利县| 富川| 拉萨市| 崇左市| 鲁山县| 大余县| 长治县| 九寨沟县| 汨罗市| 石柱| 上栗县| 陕西省| 环江| 双江| 盖州市| 饶河县| 黄梅县| 化州市| 滨州市| 钟祥市| 内黄县| 阳新县| 太湖县| 海丰县| 乐平市| 太仆寺旗| 阿巴嘎旗| 务川| 毕节市| 清远市| 苍南县| 嘉峪关市| 永平县| 清丰县| 左云县| 蓝山县| 玉门市| 苏尼特左旗| 元朗区| 十堰市| 东安县|