Keil C51中變量的使用
4.6 二義性變量
在標(biāo)準(zhǔn)C中如果要使用一個(gè)二義性變量,只能用枚舉類型。如:
以上程序在Keil C51中使用時(shí),變量t雖然僅有0和1兩種狀態(tài),但在目標(biāo)代碼中仍占用一個(gè)字節(jié)。此處理方法既浪費(fèi)存儲(chǔ)資源,又延長了處理時(shí)間,這對于8086內(nèi)核算不上多大問題,但在資源有限、運(yùn)行速度不高的51內(nèi)核中就不能不考慮了。在Keil C51中可使用以下方法:
這兩種方式效果是完全相同的,但在目標(biāo)代碼中變量t僅占用1位(即1/8字節(jié)),而且因?yàn)?1內(nèi)核單片機(jī)指令系統(tǒng)中有位處理指令,生成的目標(biāo)代碼占用內(nèi)存少、運(yùn)行速度快。
4.7 特殊功能寄存器變量(包括位變量)
特殊功能寄存器中,累加器A、寄存器B、堆棧指針SP和數(shù)據(jù)指針DPTR是歸系統(tǒng)使用的,在C51中不提供給用戶。其他的特殊功能寄存器都可以用sfr定義成變量,其中地址可以被8整除者的各位,還可以用bsfr定義成位變量。訪問這些變量,就可以對特殊功能寄存器及其可以位尋址的各位進(jìn)行讀寫,達(dá)到操作單片機(jī)內(nèi)部各硬件的目的。對于標(biāo)準(zhǔn)的51內(nèi)核單片機(jī),頭文件reg51.h、reg52.h或其他頭文件中已對這些特殊功能寄存器變量作了定義,用戶可以用#include將此頭文件包含進(jìn)來,然后就可以使用了?,F(xiàn)在很多51內(nèi)核兼容型單片機(jī)擴(kuò)展了更多的特殊功能寄存器,這些就需要用戶自行定義,具體方法可參考器件的使用說明。
4.8 外部數(shù)據(jù)存儲(chǔ)器變量
若設(shè)置成pdata和xdata存儲(chǔ)類型,將把變量存儲(chǔ)在片外數(shù)據(jù)存儲(chǔ)器中。這兩種存儲(chǔ)類型的訪問速度最慢,非迫不得已不要使用。在使用這兩種存儲(chǔ)類型時(shí),注意盡量只用它保存原始數(shù)據(jù)或最終結(jié)果,盡量減少對其訪問的次數(shù),需要頻繁訪問的中間結(jié)果不要用它。
4.9 用外部數(shù)據(jù)存儲(chǔ)器地址擴(kuò)展的其他硬件
在單片機(jī)外部擴(kuò)展的其他硬件,一般都借用外部數(shù)據(jù)存儲(chǔ)器地址,表現(xiàn)為外部數(shù)據(jù)存儲(chǔ)器單元形式。對于這些硬件,可以用指針進(jìn)行讀寫操作。例如:
結(jié)語
Keil C51中的變量增加了存儲(chǔ)類型,在使用時(shí)而顯得比標(biāo)準(zhǔn)C稍微復(fù)雜。在Keil C51中,變量的存儲(chǔ)類型不同,訪問變量所需要的時(shí)間也不同,由于C51內(nèi)核單片機(jī)資源少、速度慢,變量存儲(chǔ)類型對系統(tǒng)工作速度的影響不可忽視。在了解變量與單片機(jī)存儲(chǔ)結(jié)構(gòu)關(guān)系的基礎(chǔ)上,根據(jù)程序?qū)ψ兞康氖褂靡?,合理地選擇變量的存儲(chǔ)類型,可以在相同的硬件上獲得更高的工作效率。本文引用地址:http://2s4d.com/article/172665.htm
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
評論