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

时间:2016-06-03 14:40:47

标签: c embedded

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

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:2)

它以实现定义的方式将整数0x40004200转换为指针volatile unsigned long *,然后取消引用指针。

看起来像是内存映射I / O端口的声明。