最近都是翻舊案子,所以不太忙,花時間把以前的問題做下回顧,不懂的地方做下實驗,關於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...