У меня все еще есть некоторые проблемы с моим кодом 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));
}
Большое спасибо