Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
424 views
in Technique[技术] by (71.8m points)

c++ - How to initialize struct with a pointer inside using constexpr

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...