2

我在微控制器附带的头文件中找到了这个语句,但不知道如何评估它

#define FIO0SET        (*(volatile unsigned long *)(FIO_BASE_ADDR + 0x18))

我完全不知道这个表达是什么,所以我没有办法开始任何有意义的研究。谁能告诉我这只野兽是什么或如何评估它?

4

1 回答 1

8
#define FIO0SET  (*(volatile unsigned long *)(FIO_BASE_ADDR + 0x18))

转到内存地址FIO_BASE_ADDR + 0x18并检索存储在该位置的 32 位(如果unsigned long是 32 位)字。FIO0SET也是一个可修改的左值,因此您可以为其分配一个值。

请注意,volatile限定符用于通知编译器对象的值可以以它未知的方式更改。以输入模式下的 IO 寄存器为例:它的值可能会意外改变,编译器不能假设它的值在读取后没有改变。

例如:

unsigned long register_value;

register_value = FIO0SET; // store FIO0SET in register_value object

或者

FIO0SET = 0x1122334;      // store 0x1122334 value in FIO0SET register 
于 2012-10-24T17:28:11.377 回答