This question already has answers here:
Array of pointers like (*(volatile unsigned long *)0x40004000)

(4个答案)


4年前关闭。





#define  PA6  (*((volatile unsigned long *) 0x40004200))


以上定义是什么意思?我只能推断PA6是指向十六进制地址的指针。

最佳答案

它将值0x40004200强制转换为指向unsigned long值的指针,然后取消对该指针的引用,实质上是从内存中的该地址读取一个值。

volatile限定符意味着编译器应在不知情的情况下期望该内存位置的值发生更改。没有它,如果有一个循环检查此表达式的值,则编译器可能会决定只对内存进行一次读取以优化循环:

while (PA6 == 0) {
    /* do something else while waiting for PA6 to become non-zero */
}


但是由于指针是volatile,因此编译器必须在每次迭代中执行一次内存读取。

关于c - #define PA6(*((volatile unsigned long *)0x40004200)),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37617287/

10-14 10:10