我是 C 语言的新手,正在尝试编写一些具有七段显示的基本应用程序。声明绝对地址时,对于 8 位端口,我可以这样写:
typedef char *port8ptr;
#define OUT_ADR 0x400
#define OUT *((port8ptr) OUT_ADR)
然后简单地向变量写入类似的东西
OUT = 0x80;
获取十六进制80到端口。但上面的代码到底是什么意思呢?也就是说,为什么要定义一个指针(第一行)然后将地址转换为指向指针的指针(?!)?它显然有效,但我真的不喜欢使用我无法理解的示例中的代码。
他们进行类型转换的另一种方法是使用行
((unsigned char *) 0x400)
但老实说,我也不明白。
非常感谢!
阿克塞尔
最佳答案
当您完成所有预处理后,您会看到这一行:
*((char*)0x400) = 0x80;
让我们剖析一下。 (char *)0x400
表示获取数字 0x400
并将其转换为“指向字符的指针”。基本上它在这里说:让我们创建一个指向地址 0x400
的指针。
然后,我们将前面的 *
表示“取消引用”,这样您就可以在指针指向的内存位置实际写入一些内容,在本例中为地址 0x400
。然后在其中写入 0x80
。
关于c - 声明/寻址微芯片上的输出端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20979039/