繁体   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