[C con Clase] Más de directivas del compilador.

Juan Antonio jalr43 en hotmail.com
Mie Mar 7 19:57:55 CET 2007


Hola,

al final no he podido usar lo que me comentó Programante porque uso el 
compilador de nesC (ncc) para compilar toda esta historia de programación 
orientada a componentes y supuestame unos de los parámetros de ncc es 
cualquier parámetro del compilador de gcc, pero no lo me funciona.

Estoy mirándome otro componente que interactúa con tres leds que tiene 
conectado el microcontrolador. En el fichero hardware.h aparece entre otras 
cosas,

TOSH_ASSIGN_PIN_HEX(RED_LED, 5, 4);
TOSH_ASSIGN_PIN_HEX(GREEN_LED, 5, 5);
TOSH_ASSIGN_PIN_HEX(YELLOW_LED, 5, 6);

Con cada de las instrucciones de arriba la persona que programó esto se crea 
ocho funciones nuevas usando directivas del compilador. Dos de ellas son 
para apagar y encender el led que no es más que sacar un '1' o un '0' por el 
pin del micro al que está conectado el led. Las directivas que están en otro 
fichero son:

#define TOSH_ASSIGN_PIN_HEX(name, port, hex) \
void TOSH_SET_##name##_PIN() { MSP430REG_NORACE2(r,P##port##OUT); r |= 
hex; } \
void TOSH_CLR_##name##_PIN() { MSP430REG_NORACE2(r,P##port##OUT); r &= 
~hex; } \
void TOSH_TOGGLE_##name##_PIN() { MSP430REG_NORACE2(r,P##port##OUT); r ^= 
hex; } \
uint8_t TOSH_READ_##name##_PIN() { MSP430REG_NORACE2(r,P##port##IN); return 
(r & hex); } \
void TOSH_MAKE_##name##_OUTPUT() { MSP430REG_NORACE2(r,P##port##DIR); r |= 
hex; } \
void TOSH_MAKE_##name##_INPUT() { MSP430REG_NORACE2(r,P##port##DIR); r &= 
~hex; } \
void TOSH_SEL_##name##_MODFUNC() { MSP430REG_NORACE2(r,P##port##SEL); r |= 
hex; } \
void TOSH_SEL_##name##_IOFUNC() { MSP430REG_NORACE2(r,P##port##SEL); r &= 
~hex; }

#define TOSH_ASSIGN_PIN(name, port, bit) \
TOSH_ASSIGN_PIN_HEX(name,port,(1<<(bit)))

hex resulta 16, 32 y 64 para el caso del led rojo, verde y amarillo 
respectivamente. Mi duda está con r que no está ni asignada a ningún valor 
en ninguna parte del fichero y desconozco el valor resultante en la 
instrucción MSP430REG_NORACE2 que seguro recuerdan del anterior correo. Al 
final descubrí que hace esta instrucción: asignar una etiqueta con un 
registro del microcontrolador. De manera que ya se puede modificar el valor 
del registro o obtener su valor con la etiqueta como si de una variable se 
tratase.

Resumiendo por ejemplo con el valor de hex de 16 qué valores se sustituyen 
en r de las instrucciones MSP430REG_NORACE2.

Un saludo,
Juan Antonio.






Más información sobre la lista de distribución Cconclase