这是一个有效的C I / O库吗?

时间:2016-11-14 07:13:46

标签: c++ c

我有一个问题。我想创建一个简单的C I / O库,我想检查我使用的方法是否正确。代码实际上是伪代码,因此请忽略语法。

Simple I/O Library:
Output is 0x0000
Input is 0xFFFF

void writeChar (char* po) {
   char* ph = 0x0000
   char po;
   *ph = po
}

char readChar () {
   char* pi = 0xFFFF
   char in
   in = *pi
   return in
}

**更新:**对不起,如果我不清楚。这适用于内存映射的I / O系统。这些值只是示例。我只想测试这个想法是否有效。

还有一个问题:我想了解内存访问和端口访问之间的区别。假设这次使用端口映射I / O系统,访问端口而不是内存位置需要进行哪些更改(如果有)。

1 个答案:

答案 0 :(得分:1)

如果你的系统内存映射了端口I / O寄存器,那么你的伪代码就可以了。

Real C代码看起来像这样:

void writeChar (uint8_t po) {
   volatile uint8_t* ph = (volatile uint8_t*)0x0000;
   *ph = po
}

uint8_t readChar (void) {
   volatile uint8_t* pi = (volatile uint8_t*)0xFFFF
   return *pi;
}

真实代码永远不会使用char类型,因为它具有实现定义的签名。也就是说,char对于与硬件相关的编程是无用的,因为它是不可靠的。但是,您可以使用unsigned char

此外,实际代码必须包含强制转换,因为您无法为标准C中的指针分配整数。

  

我想了解内存访问和端口访问之间的区别。假设这次使用端口映射I / O系统,访问端口而不是内存位置需要进行哪些更改(如果有)。

在内存映射寄存器的情况下,没有真正的区别。这完全由硬件决定。您必须阅读有关特定寄存器的手册,以了解它应该如何使用。