所以我试图ORR一些微控制器上的寄存器位。 到目前为止,我一直在使用Assembly,现在我正在使用C,我打了一些墙。C地址偏移
因此,在ASM中,如果我想访问具有偏移量的寄存器,如。 GPIO_PORT_F和偏移GPIO_DATA我会使用下面的代码。
LDR R0,=GPIO_PORT_F ;load the base
LDR R1, [R0, #GPIO_DATA] ;load the offset
ORR R1, 0x1 ;ORR it with a value
STR R1, [R0, #GPIO_DATA] ;store back
这是确切的操作我想执行,但在C 这就是我。
GPIO_PORT_F的定义如下 #define GPIO_PORT_F (*((unsigned long *)0x40025000))
(GPIO_PORT_F+GPIO_DATA) = (GPIO_PORT_F+GPIO_DATA) | inMask;
我得到一个错误“表达必须修改的左值”
我在做什么错在这里,我用这是我在抵消尝试。
那么你没有很好地解释你的C代码。 'PORTA'与'GPIO_PORT_F'相同吗? GPIO_DIR是一个整数偏移量吗?如果是这样,试试这个:'*(PORTA + GPIO_DIR)| = inMask;' – 2014-10-03 08:01:32
@squeamish,我相信你想写*(PORTA + GPIO_DIR)| = inMask; 。我同意你的“方法”,它可能是解决方案“Byte Me”正在寻找 – 2014-10-03 08:05:55
如果'PORTA'是一个指针,并且'GPIO_DIR'是一个整数偏移量,那么'PORTA [GPIO_DIR]'可以用来获取或设置该指针偏移的值。 – Will 2014-10-03 08:08:03