c - 了解部分代码

标签 c macros microcontroller

这是我无法理解的微 Controller 代码的一部分。

#define GPIO_PORTF_DIR_R        (*((volatile unsigned long *)0x40025400))

int main (void){
     GPIO_PORTF_DIR_R = 0x0E;
...}

据我了解,GPIO_PORTF_DIR_R 不是变量,(*((volatile unsigned long *)0x40025400)) 是指向的地址的内容。 那么如何将 GPIO_PORTF_DIR_R 用作变量。这里发生了什么。

最佳答案

#define 声明了一个预处理器宏。这意味着在编译之前,GPIO_PORTF_DIR_R 将被替换为宏的内容。所以你实际编译的代码将是

(*((volatile unsigned long *)0x40025400)) = 0x0E;

这几乎意味着将 0x0E 写入该地址。

如果您希望通过名称引用某些(复杂的)数值,通常会使用预处理器宏。这允许您在必要时集中更改该值,但在您的代码中有一个有意义的名称,而不必为其设置变量。

关于c - 了解部分代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21734341/

相关文章:

使用字符串调用 free() 会出现 *** glibc detected *** 错误

c - 在 C 编程中设置循环限制并计算回文

compiler-construction - 方案中的匿名宏

c - 如何使数据库大小超过 256 字节 [链接器文件 - MPLAB]

嵌入式软件的调用树

c - 暂停 gstreamer 管道并进行更改后,返回播放状态时没有应用任何内容?

c - 在 Delphi 中加入 16 位整数以生成 32 位整数?

写入宏的宏-编译错误

c++ - 在 C++ 中使用宏

c++ - 如何将 Char 转换为 Float