我在带有微控制器的头文件中发现了这个语句,并且不知道如何评估它
#define FIO0SET (*(volatile unsigned long *)(FIO_BASE_ADDR + 0x18))
我不知道这个表达是什么,所以我无法开始任何有意义的研究。谁能告诉我这只野兽是什么或如何评估它?
答案 0 :(得分: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