新聞中心

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

        《C與指針》讀書筆記四

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

          數組是語言重要的概念,指的是相同類型、地址連續的一組數。一般是由數組名譽下標組成。在MODBUS通訊過程中使用數組作為寄存器的實現方式再合適不過了。雖然在實際情況中因為每個變量的類型不盡相同,但是為了歸一化處理問題,只有選擇容量大的類型。比如一組實際參數中有char型數據又有int 數據,那就全部使用int類型。雖然浪費了一些RAM空間,但是為通訊程序設計簡化創造了條件,也為其他模塊的設計奠定了基礎。

        本文引用地址:http://www.104case.com/article/201608/295183.htm

          我們摘取同事的參見一個例子:

          #define SYS_RUN_PARA_ADD_BASE 0x1000

          enum runParaAdd {

          runStateAdd, //運行狀態

          runStageAdd, //運行階段

          heatTempAdd, //加熱溫度

          HTBackTempAdd, //備份溫度

          PT_4_20maAdd, //4-20mA

          DIPAdd, //跳線及遠程班輸入

          OPTAdd, //光耦

          relayAdd, //繼電器數據

          runModeAdd, //運行加熱模式,打開或者關閉

          startTallAdd, //啟動塔

          errAdd, //錯誤寄存器

          YomAdd,

          };

          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數組,所以值是隨機的。



        關鍵詞: C 指針

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 古蔺县| 万全县| 任丘市| 连城县| 新闻| 易门县| 泽州县| 九龙坡区| 石狮市| 白玉县| 棋牌| 全南县| 沅江市| 镇安县| 岳普湖县| 成安县| 阿拉善盟| 吉林省| 左权县| 虎林市| 渑池县| 高密市| 老河口市| 上蔡县| 大安市| 盱眙县| 商洛市| 分宜县| 怀柔区| 揭阳市| 公主岭市| 房产| 鄂州市| 四子王旗| 涿州市| 信宜市| 山丹县| 南陵县| 雷山县| 酉阳| 广汉市|