<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 《C與指針》讀書筆記四

          《C與指針》讀書筆記四

          作者: 時(shí)間:2016-08-08 來源:網(wǎng)絡(luò) 收藏

            數(shù)組是語言重要的概念,指的是相同類型、地址連續(xù)的一組數(shù)。一般是由數(shù)組名譽(yù)下標(biāo)組成。在MODBUS通訊過程中使用數(shù)組作為寄存器的實(shí)現(xiàn)方式再合適不過了。雖然在實(shí)際情況中因?yàn)槊總€(gè)變量的類型不盡相同,但是為了歸一化處理問題,只有選擇容量大的類型。比如一組實(shí)際參數(shù)中有char型數(shù)據(jù)又有int 數(shù)據(jù),那就全部使用int類型。雖然浪費(fèi)了一些RAM空間,但是為通訊程序設(shè)計(jì)簡(jiǎn)化創(chuàng)造了條件,也為其他模塊的設(shè)計(jì)奠定了基礎(chǔ)。

          本文引用地址:http://www.ex-cimer.com/article/201608/295183.htm

            我們摘取同事的參見一個(gè)例子:

            #define SYS_RUN_PARA_ADD_BASE 0x1000

            enum runParaAdd {

            runStateAdd, //運(yùn)行狀態(tài)

            runStageAdd, //運(yùn)行階段

            heatTempAdd, //加熱溫度

            HTBackTempAdd, //備份溫度

            PT_4_20maAdd, //4-20mA

            DIPAdd, //跳線及遠(yuǎn)程班輸入

            OPTAdd, //光耦

            relayAdd, //繼電器數(shù)據(jù)

            runModeAdd, //運(yùn)行加熱模式,打開或者關(guān)閉

            startTallAdd, //啟動(dòng)塔

            errAdd, //錯(cuò)誤寄存器

            YomAdd,

            };

            extern int runPara[YCComAdd+1];

            分析以上代碼:int runPara[YCComAdd+1]; 定義了個(gè)數(shù)組,并且使用枚舉量YCComAdd加1定義了數(shù)組的空間。YCComAdd到底是多少,參見枚舉量runParaAdd定義,YCComAdd應(yīng)該是常量11,11加1等于12。語句int runPara[YCComAdd+1]等價(jià)于runPara[12]。

            系統(tǒng)會(huì)在RAM區(qū)分配一個(gè)整型的數(shù)組,空間大小是12個(gè)整型。在VC6.0中應(yīng)該是48個(gè)字節(jié)的空間。在設(shè)計(jì)通訊程序時(shí)直接根據(jù)地址可以訪問該數(shù)組。

            RMESDATAHead *pMes;

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

            unsigned int REGNumber; //數(shù)據(jù)數(shù)量

            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);

            //讀取運(yùn)行參數(shù)

            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校驗(yàn)

            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;

            使用數(shù)組完成通訊程序。只要基本數(shù)據(jù)設(shè)計(jì)合理,MODBUS通訊程序非常簡(jiǎn)單。雖然在定義變量時(shí)浪費(fèi)一些RAM,但在編寫程序時(shí)可以省卻大量的代碼。

            一維數(shù)組使用最常見,地址是線性的,非常簡(jiǎn)單。很容易畫出內(nèi)存模型。

            比如:int arrary[10];

            因?yàn)槲覀儾]有初始化arrary數(shù)組,所以值是隨機(jī)的。



          關(guān)鍵詞: C 指針

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();