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