让我们从我能够工作的东西开始,然后开始工作,然后希望社区可以帮助我找出原因。
我们说我有以下课程:
#define BASE 0x20200000 /* base GPIO address in memory mapped IO*/
#define GPSET0 0x1c /* Pin Output Set */
#define GPCLR0 0x28 /* Pin Output Clear */
class LedDriver
{
void set_bit(int value)
{
if (value) {
reg = GPSET0;
} else {
reg = GPCLR0;
}
// set bit 15 based on the register being used
volatile int* address = ((volatile int*) (BASE+reg);
*(address) |= (1 << 15);
}
}
这很好用,最终结果是LED闪烁。太好了!
现在我想使用类成员,例如:
class LedDriver
{
// some class members
volatile const int BASE = 0x20200000; /* base GPIO address in memory mapped IO*/
volatile const int GPSET0 = 0x1c; /* Pin Output Set */
volatile const int GPCLR0 = 0x28; /* Pin Output Clear */
void set_bit(int value)
{
if (value) {
reg = GPSET0;
} else {
reg = GPCLR0;
}
// set bit 15 based on the register being used
volatile int* address = ((volatile int*) (BASE+reg);
*(address)|= (1 << 15);
}
}
但这不起作用。我在C ++中没有足够的经验知道原因,但我确实认为它与十六进制加法有关,或者某种程度上变量的处理方式与宏不同。
我的假设是否正确?如果是这样,有没有办法使它工作,或者它不打算以这种方式工作?
最后一点说明:为了学习,我故意用编译器标志-nostdlib
来避免任何stdlib函数。