<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > C51 指針問(wèn)題

C51 指針問(wèn)題

作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò ) 收藏
一般指針
一般指針的聲明和使用均與標準C相同,不過(guò)同時(shí)還可以說(shuō)明指針的存儲類(lèi)型,例如:
long * state;為一個(gè)指向long型整數的指針,而state本身則依存儲模式存放。
char * xdata ptr;ptr為一個(gè)指向char數據的指針,而ptr本身放于外部RAM區,以上的long,char等指針指向的數據可存放于任何存儲器中。

一般指針本身用3個(gè)字節存放,分別為存儲器類(lèi)型,高位偏移,低位偏移量。2.存儲器指針

基于存儲器的指針說(shuō)明時(shí)即指定了存貯類(lèi)型,例如:

char data * str;str指向data區中char型數據
int xdata * pow; pow指向外部RAM的int型整數。
這種指針存放時(shí),只需一個(gè)字節或2個(gè)字節就夠了,因為只需存放偏移量。


/*.........................................................................................
char * xdata ptr;//ptr本身放在Xdata(XRAM)區

char xdata * ptr;//ptr指向的數據放在Xdata(XRAM)區
........................................................................................*/


char xdata * px
char xdata * data px
data char xdata * px
這3者有什么不同??

char xdata * px
px本身存在于自動(dòng)分配的空間,一般位于data中,指向的內容位于xdata
char xdata * data px
px本身存在于data空間,指向的內容位于xdata
data char xdata * px =char xdata *data px


data:固定指前面0x00-0x7f的128個(gè)RAM,可以用acc直接讀寫(xiě)的,速度最快,生成的代碼也最小。
idata:固定指前面0x00-0xff的256個(gè)RAM,其中前128和data的128完全相同,只是因為訪(fǎng)問(wèn)的方式不同。idata是用類(lèi)似C中的指針?lè )绞?br />訪(fǎng)問(wèn)的。匯編中的語(yǔ)句為:mox ACC,@Rx.(不重要的補充:c中idata做指針式的訪(fǎng)問(wèn)效果很好)
xdata:外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪(fǎng)問(wèn)。
pdata:外部擴展RAM的低256個(gè)字節,地址出現在A(yíng)0-A7的上時(shí)讀寫(xiě),用movx ACC,@Rx讀寫(xiě)。這個(gè)比較特殊,而且C51好象有對此BUG,建議少用。但也有他的優(yōu)點(diǎn),具體用法屬于中級問(wèn)題,這里不提。




xdata unsigned char *p; 和 unsigned char* xdata p; 完全一樣。
因為C寫(xiě)法中允許“最前面的存儲類(lèi)型修飾符修飾最后面的對象。


(1) unsigned char * xdata p
表明指針本身位于Xdata,至于指向什么類(lèi)型的地址,自由變換.
例如
unsigned chara_data;
unsigned char xdata b_xdata;

當p = &a_data;*p等于a_data;它表示p指向的地址自動(dòng)轉換成data地址

當p = &b_xata;*p等于b_data;它表示p指向的地址自動(dòng)轉換成xdata地址



(2)unsigned char xdata * p//注意:這種用法不推薦
表示指針指向的地址是xdata



unsigned chara_data;
unsigned char xdata b_xdata;

當p = &a_data;*p不等于a_data;因為盡管相對地址相同,但a_data的地址在data空間中,而p指向的地址是xdata空間。(KEIL也會(huì )提示空間匹配錯誤)



當p = &b_xata;*p等于b_data;因為b_data本身就放在xdata,而p指向的地址是xdata。所以沒(méi)有問(wèn)題。

所以在定義指針的時(shí)候,如果不確定傳入的參數的空間范圍是哪里,最好不要限定指針指向的地址。例如直接用unsigned char *p。它會(huì )根據不同參數的空間,自動(dòng)尋找相應的地址!
unsigned char *p //推薦


關(guān)鍵詞: C51指針問(wèn)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>