Мне очень трудно понять, как решить следующую проблему. Я использую встроенную систему с очень небольшим объемом памяти и хочу минимизировать использование памяти.
Указатели всегда выводили меня из себя и всегда будут делать.
У меня есть целая куча определений для адресов регистров:
#define GPIO_PORTA_BASE (*((volatile unsigned long *)0x40004000))
#define GPIO_PORTB_BASE (*((volatile unsigned long *)0x40005000))
//etc..
Эти регистры имеют прямой доступ. например:
GPIO_PORT_BASE &= 0x01;
Мне нужен массив, содержащий вышеупомянутые регистры, чтобы я мог легко сопоставить их с индексом. например:
not_sure_what_to_declare_the array_as port_base_array[] {
GPIO_PORTA_BASE,
GPIO_PORTB_BASE,
//etc
}
Что мне нужно для того, чтобы я смог это сделать, это что-то вроде этого:
volatile unsigned long *reg;
*reg_a = port_base_array[0];
reg_a &=0x1;
Я использую gcc для компиляции кода для arm cortex m3.
Любое понимание будет оценено.