簡體   English   中英

為什么指向16位寄存器的指針是uword?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM