【发布时间】:2017-12-10 18:52:35
【问题描述】:
我相信我理解rvalue 和lvalue 的含义。我不清楚的是取消引用是否是rvalue。
考虑一下:
#define GPIO_BASE 0x20200000
#define GPFSEL1 (*(volatile unsigned int *)(AUX_MU_BASE + 0x4))
GPFSEL1 是对 unsigned int 指针的取消引用。该无符号整数指针是硬件寄存器的物理地址。
我读到这是裸机编程中直接访问硬件寄存器的常用技术。到目前为止,我可以毫无问题地使用它。
现在我想要一个 reference 到 GPFSEL1 作为结构的成员。这可能吗?
struct MotorControl
{
u8 pwm_pin;
u8 ctrla_pin;
u8 ctrlb_pin;
volatile unsigned int* MYGPFSEL; // this is not the same thing so does not work
}
鉴于下面的这个函数,引用在别处定义的GPFSEL1 的正确方法是什么以及如何取消引用它来设置它的值?
MotorContorl group
group.MYGPFSEL = ?
void set(unsigned char pin_number, bool high)
{
if (high)
{
// how to correct this statement
group.MYGPFSEL |= 1<< pin_number;
}
}
【问题讨论】:
-
C没有定义右值,AFAIR。 -
移除标签
-
这个有点不清楚。该结构与左值和右值有什么关系?
-
这基本上就是引用。您可以使用
volatile unsigned int &MYGPFSEL;。 -
@SamHammamy 请注意,在 C++ 中,“引用”是一个非常具体的东西,因此请确保这是您真正想要的(您可能不想要,当前使用指针的代码是做你正在做的)
标签: c++ dereference bare-metal