code裡關於xdata的一些理解及如何看暫存器

2021-09-24 10:14:55 字數 2402 閱讀 8346

最近都是翻舊案子,所以不太忙,花時間把以前的問題做下回顧,不懂的地方做下實驗,關於xdata做下記錄吧!

1.code裡關於xdata的理解

在code裡,經常看到這樣的寫法(scregs[(u16addr)&0xff]),如圖:

現在就scregs這個寫法做下分析:

xdata是large儲存型別,volatile是通過硬體來改變指標指向的內容。

如:#define scregs ((unsigned char volatile xdata ) 0x2f00)

說明:定義 msregs為指向xdata位址空間unsigned char資料型別指標(注意是指標!!),指標值為0x2f00。這樣就可以直接用scregs[addr]或(scregs+addr)訪問外部ram了。至於 volatile的作用就是讓編譯器不至於優化掉它的操作,但是scregs[addr]的具體內容就要看0x2f00+addr這個暫存器的位置裡放的內容,這個要查晶元手冊了。

eg.如:mem_scread_byte(sc0_ce)的解釋

原型為:#define mem_scread_byte(u16addr) (scregs[(u16addr)&0xff]),

已知:#define scregs ((unsigned char volatile xdata *) 0x2f00)

那麼轉換過來就是(scregs[0x00ce|_bit15)&0xff, 結果就是指向scaler bank的2f bank,0xce這個暫存器,即2fceh這個位置,按位&上0xff是取這個暫存器裡的內容。

所以mem_scread_byte(sc0_ce)的具體位置在晶元手冊裡就是bank=2f,sub-bank=00,即2fce這個暫存器的位置。其在晶元手冊中位置如下圖(tsumu588dg晶元):

****總結:使用xbyte時,初始化方法是xbyte[0***xx],這是c51中專有的東西,在c51程式設計中只要有外部擴充套件ram就得這樣用。在51微控制器中,ram空間有內外之分,而內部ram與外部256位元組的ram同位址,在有擴充套件外部ram的系統中,有的會用上外部ram的前256位元組,有的前256位元組沒有用。#define scregs ((unsigned char volatile xdata *) 0x2f00)這個定義就是用後256位元組,即外部ram從0x2f00開始定址。

//8051 特有的記憶體型態

code 以 movc @a+dptr 讀取的程式記憶體

data 可以直接訪問的內部資料儲存器

idata 以 mov @rn 訪問的內部資料儲存器

bdata 可以位定址(bit addressable)的內部儲存器

xdata 以 movx @dptr 訪問的外部資料儲存器

pdata 以 movx @rn 訪問的外部資料儲存器

ps:另外關於xdata的具體理解,可參考這偏部落格,這篇部落格也對我的理解起了很大作用,感謝博主的分享!

2.mstar晶元怎樣看暫存器

比如看sc0_e4這個暫存器:sco代表scalebank,0x00e4中,00代表bank0,e4代表bank0的e4這個暫存器,所以綜合起來就是0x00e4代表的是,scalebank的sub_bank0的e4暫存器。

對應ic手冊位置:

使用mstar monitor system tool工具找對應的位置

3.向暫存器寫一位(bit)

有時候我們需要操作暫存器的某乙個bit位,可以用這種方式:

void writebit( word u16reg, bool bbit, byte u8bitpos )

else

writebyte( u16reg, u8value );

}//用法

writebit(reg_2e69, true, _bit4); //向reg_2e69這個暫存器的bit4寫1

先讀出該暫存器存放在u8value這個變數裡,然後判斷bbit,即寫入的是0還是1,是1的話,通過按位與運算,將指定位(u8bitpos)給1;

寫入的是0的話,先將指定位(u8bitpos)按位取反就將指定位清0了,從而不會影響其他位,然後按位與(&),這樣就將指定位清0.

關於函式柯里化的一些理解

大家都學過數學,都應該記得下面這個熟悉的表示式 y f x 沒錯,y是關於x的函式,當x確定的時候,y也就確定 再比如,z f x,y z是關於x,y的函式,當其中乙個x或者y確定的時候,就會變成 z f x 或者z f y 這樣的關係 先寫乙個簡單的柯里化的例子 function curry fn...

phpmcs 裡的一些函式

message alert,goback 顯示js訊息對話方塊形式的提示資訊 無返回值,alert為提示資訊內容,goback引數是使用者確認後跳轉的url位址 此引數可選,預設為空即不進行跳轉,如果該引數的值為 goback 則使用者確認後瀏覽器自動跳轉到前乙個開啟的位址,如果該引數的值為 clo...

Oracle Inventory裡的一些概念

事務處理 transaction 是指物料移入庫存 在庫存內移動以及移出庫存.物料搬運單 move order 是在乙個組織內對物料進行移動的請求.保留 reservation 是 與需求 之間的關聯。保留將在 與需求 之間建立乙個永久的資料關聯,代表指定需求 的乙個可靠的物料分配。現有量 on h...