gpt4 book ai didi

c - 需要此语法的帮助 : "#define LEDs (char *) 0x0003010"

转载 作者:太空宇宙 更新时间:2023-11-04 05:08:22 25 4
gpt4 key购买 nike

我正在对一个软核处理器进行编程,来自 Altera 的 Nios II,下面是其中一个教程中的代码,我设法通过在硬件(DE2 板)上测试它来使代码工作,但是,我可以看不懂代码。

#define Switches (volatile char *) 0x0003000
#define LEDs (char *) 0x0003010
void main()
{ while (1)
*LEDs = *Switches;
}

我对#define的了解是,它要么用于定义常量,要么用于定义,但是

  1. 为什么在上面的代码中,在#define中有类似(char *) 0x0003010的转换?
  2. 为什么这 2 个常量,开关LED 就像一个变量而不是一个常量?

最佳答案

1) why in the above code, there are casting like, (char *) 0x0003010, in #define?

预处理器宏是文本替换。所以代码出来了

while (1) {
*(char *) 0x0003010 = *(volatile char *) 0x0003000
}

重复将映射到 0x3000 的输入(开关)的内容分配给映射到 0x3010 的输出(led)。

2) why the 2 constants, Switches and LEDs act like a variable instead of a constant?

注意那些是指针。所以它们总是指向同一个地方(恰好是几个内存映射的 IO 引脚或类似的东西),但不能保证这些常量位置的内容是常量,并且 * 出现在每个预处理器符号之前的是指针取消引用运算符。

关于c - 需要此语法的帮助 : "#define LEDs (char *) 0x0003010",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com