C51存儲類型
C51編譯器完全支持8051微處理器及其系列的結(jié)構(gòu),可完全訪問MCS-51硬件系統(tǒng)所有部分。每個變量可準(zhǔn)確地賦予不同的存貯器類型(data,idata,pdata,xdata,code)。訪問內(nèi)部數(shù)據(jù)存貯器(idata)要比訪問外部數(shù)據(jù)存貯器(xdata)相對要快一些,因此,可將經(jīng)常使用的變量置于內(nèi)部數(shù)據(jù)存貯器中,而將較大及很少使用的數(shù)據(jù)單元置于外部數(shù)據(jù)存貯器中。
存貯器類型 本文引用地址:http://butianyuan.cn/article/201611/315598.htm | 描 述 |
data | 直接尋址內(nèi)部數(shù)據(jù)存貯器,訪問變量速度最快(128bytes) |
bdata | 可位尋址內(nèi)部數(shù)據(jù)存貯器,允許位與字節(jié)混合訪問(16 bytes) |
iIdata | 間接尋址內(nèi)部數(shù)據(jù)存貯器,可訪問全部地址空間(256bytes) |
pPdata | 分頁(256bytes)外部數(shù)據(jù)存貯器,由操作碼MOVX @Ri訪問 |
xdata | 外部數(shù)據(jù)存貯器(64K),由MOVX @DPTR訪問 |
code | 代碼數(shù)據(jù)存貯器(64K),由MOVC @A+DPTR訪問 |
變量說明舉例:
data char charvar;
char code msg[]=”ENTER PARAMETER:”;
unsigned long xdata array[100];
float idata x,y,z;
unsigned char xdata vector[10][4][4];
sfr p0=0x80;
sbit RI="0x98";
char bdata flags;
sbit flago="flags"^0;
如果在變量說明時略去存貯器類型標(biāo)志符,編譯器會自動選擇默認(rèn)的存貯器類型。默認(rèn)的存貯器類型進(jìn)一步由控制指令SMALL、COMPACT和LARGE限制。例如:如果聲明char charvar,則默認(rèn)的存貯器模式為SMALL,charvar放在data存貯器;如果使用COMPACT模式,則charvar放入idata存貯區(qū);在使用LARGE模式的情況下,charvar被放入外部存貯區(qū)或xdata存貯區(qū)。存貯器模式
存貯器模式?jīng)Q定了自動變量和默認(rèn)存貯器類型,參數(shù)傳遞區(qū)和無明確存貯區(qū)類型的說明。在固定的存貯器地址變量參數(shù)傳遞是C51的一個標(biāo)準(zhǔn)特征,在SMALL模式下參數(shù)傳遞是在內(nèi)部數(shù)據(jù)存貯區(qū)中完成的。LARGRE和COMPACT模式允許參數(shù)在外部存貯器中傳遞。C51同時也支持混合模式,例如在LARGE模式下生成的程序可將一些函數(shù)分頁放入SMALL模式中從而加快執(zhí)行速度。
存貯器模式 | 描 述 |
SMALL | 參數(shù)及局部變量放入可直接尋址的內(nèi)部寄存器(最大128bytes,默認(rèn)存貯器類型是DATA) |
COMAPCT | 參數(shù)及局部變量放入分頁外內(nèi)部存貯區(qū)(最大256bytes,默認(rèn)存貯器類型是PDATA) |
LARGE | 參數(shù)及局部變量直接放入外部數(shù)據(jù)存貯器(最大64K,默認(rèn)存貯器類型是XDATA) |
if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = false; var cb_blogId = 45554; var cb_entryId = 1552895; var cb_blogApp = "papam"; var cb_blogUserGuid = "c3f8460b-63cf-dd11-9e4d-001cf0cd104b"; var cb_entryCreatedDate = 2009/8/24 14:49:00;
評論