![](/img/trans.png)
[英]Why does the short (16-bit) variable mov a value to a register and store that, unlike other widths?
[英]Why a pointer to a 16-bit register is uword?
處理器中有許多16位寄存器,其定義如下
#define CAN_REG01 (*((uword volatile far *) 0x200000))
如果寄存器及其值仍為16位,為什么需要(uword *)指針?
如果看一下數據手冊,您會發現CAN_REG01的地址是0x200000
。
為了給您提供可讀性,您可以使用它們來寫入(或讀取)該特殊功能寄存器(SFR),此人創建的定義可以讓您像使用一些普通變量一樣使用名稱CAN_REG01
。
您必須告訴編譯器您要在地址0x200000
處編寫,因此必須將其視為指針。 此外,您還必須告訴編譯器該指針后面的數據大小。 顯然,CAN_REG01寄存器的大小為uword
(在您的特定平台上意味着什么)。 必須添加volatile
以強制編譯器不優化對該地址的訪問,因為某些處理器內部或中斷可能會獨立於代碼而對其進行更改。 另外,否則編譯器可能會刪除對該寄存器的連續分配,因為他認為只有最后一個才有意義。
以這種方式定義SFR在嵌入式平台裸機編譯器中非常普遍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.