SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: diego.martinez en Lunes 21 de Abril de 2008, 12:06

Título: Problema Con Declaración
Publicado por: diego.martinez en Lunes 21 de Abril de 2008, 12:06
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:
Código: Text
  1.  
  2.  
  3.  //----------------------------------------------------------------- TACTL
  4.  
  5. .... // codigo identico a TB_CTL con diferentes direcciones
  6.  
  7.  //----------------------------------------------------------------- TB_CTL
  8.  unsigned short volatile * const TB_CTL     [] =
  9.  {
  10.           #if __MSP430_TB >= 1
  11.                   &TBCCTL0,
  12.           #endif
  13.           #if __MSP430_TB >= 2
  14.                   &TBCCTL1,
  15.           #endif
  16.           #if __MSP430_TB >= 3
  17.                   &TBCCTL2,
  18.           #endif
  19.           #if __MSP430_TB >= 4
  20.                   &TBCCTL3,
  21.           #endif
  22.           #if __MSP430_TB >= 5
  23.                   &TBCCTL4,
  24.           #endif
  25.           #if __MSP430_TB >= 6
  26.                   &TBCCTL5,
  27.           #endif
  28.           #if __MSP430_TB >= 7
  29.                   &TBCCTL6
  30.           #endif
  31.  };
  32.  
  33.  
  34. //----------------------------------------------------------------- MAIN REGISTERS
  35.   unsigned short volatile * const MasterReg     []= { &TACTL,&TBCTL };
  36.  
  37. //----------------------------------------------------------------- MODULE REGISTERS
  38.   unsigned short volatile * const * TimerReg [2][2] = {  {TA_CCR,TA_CTL},{TB_CCR,TB_CTL} }; //<<----- PROBLEMA AQUI!
  39.  
  40.  
  41.  
  42.  

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.