Buenas:
Estoy intentando crear una aplicación que maneje microcontroladores, para ello estoy haciendo una interfaz para las direcciones de los registros.
Tengo unos arrays definidos asi:
//----------------------------------------------------------------- TACTL
.... // codigo identico a TB_CTL con diferentes direcciones
//----------------------------------------------------------------- TB_CTL
unsigned short volatile * const TB_CTL [] =
{
#if __MSP430_TB >= 1
&TBCCTL0,
#endif
#if __MSP430_TB >= 2
&TBCCTL1,
#endif
#if __MSP430_TB >= 3
&TBCCTL2,
#endif
#if __MSP430_TB >= 4
&TBCCTL3,
#endif
#if __MSP430_TB >= 5
&TBCCTL4,
#endif
#if __MSP430_TB >= 6
&TBCCTL5,
#endif
#if __MSP430_TB >= 7
&TBCCTL6
#endif
};
//----------------------------------------------------------------- MAIN REGISTERS
unsigned short volatile * const MasterReg []= { &TACTL,&TBCTL };
//----------------------------------------------------------------- MODULE REGISTERS
unsigned short volatile * const * TimerReg [2][2] = { {TA_CCR,TA_CTL},{TB_CCR,TB_CTL} }; //<<----- PROBLEMA AQUI!
los arrays son direcciones de registros mapeados en memoria, asi que las direcciones son constantes, pero contienen datos Volatiles (que pueden cambiar por el hardware del microcontrolador)
La cosa funciona , pero la idea era crearlos constantes para que al optimizarlo, el acceso a estos registros quede lo mas escueto posible (a ser posible una instrucción).
El problema surge cuando intentamos dejarlo fijado en el .H que por supuesto nos da que "TimerReg is already defined" pero si lo ponemos en el cpp no nos lo optimiza.
La pregunta es:
¿por que no salta el "already defined" con los demas arrays?
(suponemos que es por que hace la sustitucion correctamente, pero entonces no saltaria en el TimeReg)
¿como podemos forzar que lo optimice sustituyendo las direcciones constantes?
estimo que el problema puede ser de la propia sintaxis de la declaración del array bidimensional TimerReg , que tiene muchos punteros.
Muchas gracias por anticipado.