c - 声明/寻址微芯片上的输出端口

标签 c microprocessors

我是 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/

相关文章:

C 编程 - 程序崩溃

c - 一元运算符如何在 C 中工作,您不能预递增零

c++ - 检查写入寄存器的值是否正确

c - 结构大小、填充和 future

c - 如何在 C 中将字符数组的一部分转换为整型变量

c - 单链表输出中不需要的零

c - 如何在 C 中执行 IP 遍历

c - 如何在 32 位架构中为 64 位整数创建数据结构?

c - 我怎样才能导致指令缓存未命中?

微处理器的 .net 开发