【发布时间】:2010-11-12 15:34:00
【问题描述】:
我的 c 代码处理内存映射设备时仍有一些问题。 目前我将我写的寄存器的地址空间声明为 volatile 指针,我向它们写入数据,如下所示:
volatile unsigned int *wr_register = (int *) 0x40000000;
volatile unsigned int *c_register = (int *) 0x40000100;
...
main{
*wr_register = 0x01234567;
*c_register = 0x01234567;
*(c_register+1) = 0x89abcdef;
}
这或多或少都很好。但是,我想有具体的阅读和 编写与内存映射寄存器交互的函数。所以理想情况下, 它看起来像这样:
const unsigned int wr_register = 0x40000000;
const unsigned int c_register = 0x40000100;
function write_REG(unsigned int address, int offset, int data)
{
(unsigned int*) (address + offset) = data;
}
main{
*write_REG(0x40000000, 0, 0x01234567);
*write_REG(0x40000100, 0, 0x01234567);
*write_REG(0x40000100, 1, 0x89abcdef);
}
说实话,我还没有尝试过,但我想知道是否有人可以 告诉我这是否正确?
编辑:也许它对其他人有用,在这里我有我的功能,他们似乎工作。非常感谢提供帮助的 cmets!
void reg_write(unsigned int address, int offset, int data)
{
*((volatile unsigned int*)address + offset) = data;
}
int reg_read(unsigned int address, int offset)
{
return(*((volatile unsigned int*)address + offset));
}
非常感谢
【问题讨论】:
-
我认为你在函数调用之前有多余的'*'。另外,我认为您打算在函数调用中使用变量“地址”而不是硬编码。
标签: c memory-mapping