我有一个问题。我想创建一个简单的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系统,访问端口而不是内存位置需要进行哪些更改(如果有)。
答案 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系统,访问端口而不是内存位置需要进行哪些更改(如果有)。
在内存映射寄存器的情况下,没有真正的区别。这完全由硬件决定。您必须阅读有关特定寄存器的手册,以了解它应该如何使用。