im working on embbebed MCU 32 bits, i have a code that compiles fine with older version of gcc but on newers version it fails.
The code bassically defines some addres, some pointer to that address and pass that pointer to a struct init
#define MY_ADDR 0x40048028
#define MY_MASK 0x40048028
#define myRegPointer (*(volatile uint32_t *)my_ADDR)
typedef struct {
volatile uint32_t &myReg;
uint32_t mask;
uint8_t pin[5];
} myDevice_t;
constexpr myDevice_t first_device = {
myRegPointer, MY_MASK,
0, 0, 0, 0, 0,
};
So for example, later in the code i use
first_device->myReg |= MY_MASK
Where im falling now is to make it compile with newers version of gcc (gcc 9.21)
It returns
error: reinterpret_cast from integer to pointer
in line 3; ie: #define myRegPointer (*(volatile uint32_t *)my_ADDR) .
If i remove the constexpr
in myDevice_t
init it compiles finem but i want to keep as much as i can as this is a little code snippet of a larger code.
How come overcome this problem?
question from:
https://stackoverflow.com/questions/65876217/how-to-initialize-struct-with-a-pointer-inside-using-constexpr 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…