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

          新聞中心

          Keil C51中變量的使用

          作者: 時(shí)間:2011-06-23 來(lái)源:網(wǎng)絡(luò) 收藏


          3 存儲(chǔ)模式的必要性
          中,的存儲(chǔ)模式是一個(gè)可選項(xiàng),如果不這個(gè)選項(xiàng),則 在編譯時(shí)自動(dòng)進(jìn)行優(yōu)選分配。但這種處理方法有以下缺點(diǎn):
          ①系統(tǒng)不知道各種頻度,有可能對(duì)使用頻度高的變量使用了訪問(wèn)速度慢的片外存儲(chǔ)方式,而對(duì)使用頻高的變量使用了片內(nèi)存儲(chǔ)方式,使得程序的運(yùn)行效率降低;
          ②在使用指針尋址時(shí),由于不知道尋址對(duì)象的存儲(chǔ)方式,只好使用一般指針,在Keil C51中一般指針要多占用1~2個(gè)字節(jié),并且使用時(shí)還要對(duì)存儲(chǔ)方式進(jìn)行判斷,增加了尋址操作時(shí)間。
          如果能夠在定義變量的同時(shí)定義其存儲(chǔ)類型,可以高效地使用51內(nèi)核單片機(jī)的存儲(chǔ)空間,獲得高質(zhì)量的目標(biāo)代碼。

          4 Keil C51變量的使用方法
          4.1 全局變量和靜態(tài)局部變量
          全局變量一般會(huì)在多個(gè)函數(shù)中被使用,并在整個(gè)程序運(yùn)行期間內(nèi)有效,靜態(tài)局部變量雖然只在一個(gè)函數(shù)中使用,但也是在整個(gè)程序運(yùn)行期間有效。對(duì)于這些變量,應(yīng)盡量選擇data型,這樣在目標(biāo)代碼中就可以用直接尋址指令訪問(wèn),獲得最高的訪問(wèn)速度,提高程序的工作效率。例如一個(gè)保存人數(shù)的全局變量n_g,在多個(gè)函數(shù)中都被經(jīng)常用到,可以這樣定義:
          unsigned int data n_g;//對(duì)n_g賦值時(shí)使用“MOV XXH,……”指令
          4.2 數(shù)組(包括全局和局部)
          定義數(shù)組一般用idata存儲(chǔ)類型,在目標(biāo)代碼中使用“MOV@Ri”指令進(jìn)行間接尋址。如果因數(shù)組元素過(guò)多而在編譯時(shí)報(bào)錯(cuò),可以改用pdata和xdata存儲(chǔ)類型。
          數(shù)組定義為data存儲(chǔ)類型意義不大,因?yàn)榧热皇褂脭?shù)組,就是希望能夠根據(jù)某一自變量訪問(wèn)數(shù)組元素。如定義X[100],一般都是為了能夠使用X[i](i是一個(gè)變量)來(lái)訪問(wèn),這樣在目標(biāo)代碼中就必須使用問(wèn)接尋址,所以數(shù)組沒(méi)有必要使用data存儲(chǔ)類型,即便使用了data存儲(chǔ)類型,在目標(biāo)代碼中也仍然要用間接尋址指令。數(shù)組定義成idata存儲(chǔ)類型,在使用52內(nèi)核且片內(nèi)數(shù)據(jù)存儲(chǔ)器不夠時(shí),會(huì)使用只能間接尋址的片內(nèi)數(shù)據(jù)存儲(chǔ)空間。這樣,既不能降低處理速度,又?jǐn)U大了可使用的存儲(chǔ)空間。
          4.3 供查表用的數(shù)據(jù)
          這類數(shù)據(jù)的特點(diǎn)是需要始終保持不變,且使用時(shí)只讀,因此應(yīng)定義為code型。例如一個(gè)字形表:
          c.JPG
          全局或局部code型變量在存儲(chǔ)時(shí)無(wú)區(qū)別。
          4.4 非靜態(tài)局部變量
          非靜態(tài)局部變量?jī)H在某一函數(shù)內(nèi)使用,退出該函數(shù)時(shí)變量也被釋放。
          若系統(tǒng)使用small存儲(chǔ)模式,對(duì)于這些變量可以不加存儲(chǔ)說(shuō)明,由編譯軟件自行按最優(yōu)原則決定,因?yàn)閮H在函數(shù)內(nèi)使用的非靜態(tài)局部變量,有可能使用工作寄存器R0~R7,這樣會(huì)更快速和更節(jié)省存儲(chǔ)空間。例如:
          unsigned char i,j; //系統(tǒng)盡可能會(huì)用R0~R7存儲(chǔ)i和j
          若系統(tǒng)使用了compact或large存儲(chǔ)模式,則應(yīng)將這些變量定義為data存儲(chǔ)模式,以防系統(tǒng)自行決定時(shí)被定義為pdagta或xdata模式而降低工作效率。
          4.5 指針
          如前所述,定義指針變量時(shí)有2個(gè)存儲(chǔ)類型:數(shù)據(jù)存儲(chǔ)類型,說(shuō)明被尋址對(duì)象的存儲(chǔ)類型;指針存儲(chǔ)類型,說(shuō)明指針自身的存儲(chǔ)類型。當(dāng)數(shù)據(jù)存儲(chǔ)類型為xdata時(shí),指針自身占用2個(gè)字節(jié);當(dāng)數(shù)據(jù)存儲(chǔ)類型為pdata以及idata等片內(nèi)存儲(chǔ)類型時(shí),指針自身占用1個(gè)字節(jié);若不說(shuō)明數(shù)據(jù)存儲(chǔ)類型,指針自身就要占用3個(gè)字節(jié)。因此,在KeilC51中使用指針時(shí),應(yīng)盡量定義數(shù)據(jù)存儲(chǔ)類型,但要特別注意指針中的數(shù)據(jù)存儲(chǔ)類型與被尋址對(duì)象的存儲(chǔ)類型必須一致。指針都是頻繁使用的,它要不斷被設(shè)置、修改和使用,因此它自身的存儲(chǔ)類型應(yīng)選擇data型。例如定義一個(gè)數(shù)組時(shí)就同時(shí)定義其存儲(chǔ)類型,以后用指針對(duì)其尋址時(shí)就將數(shù)組的存儲(chǔ)類型添加到指針的數(shù)據(jù)類型中。方法如下:
          d.JPG

          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理




          關(guān)鍵詞: 使用 變量 C51 Keil

          評(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); })();