我的处理内存映射设备的 c 代码仍然存在一些问题。目前,我将写入的寄存器的地址空间声明为易失性指针,并向它们写入数据,如下所示:
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);
}
老实说,我还没有尝试过,但我想知道是否有人可以告诉我这是否是正确的方法?
编辑:也许它对其他人有用,在这里我有我的功能,他们似乎工作。非常感谢您的有用评论!
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));
}
非常感谢