Массив указателей типа (* (volatile unsigned long *) 0x40004000)

Мне очень трудно понять, как решить следующую проблему. Я использую встроенную систему с очень небольшим объемом памяти и хочу минимизировать использование памяти. Указатели всегда меня до чертиков сбивали с толку, и они всегда будут делать это.

У меня есть целый набор определений адресов регистров:

#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.

Любое понимание будет оценено.

9
задан Jonathan Leffler 21 November 2011 в 06:20
поделиться