• Jueves 25 de Abril de 2024, 05:39

Autor Tema:  Problema Con Declaración  (Leído 811 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Problema Con Declaración
« en: Lunes 21 de Abril de 2008, 12:06 »
0
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.