[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