Hola
En C no existe el tipo de variable "string" como tal, sino que las cadenas se manejan como matrices de caracteres (char).
Para declarar este tipo de variables tienes que asignarles obligatoriamente un tamaño, que ademas tiene que ser 1 mas del tamaño maximo del texto. Esto es asi porque todas las cadenas tienen que terminar con el caracter " ", que es el terminador nulo.
por ejemplo:
char texto[10]={"Hola"};
las 10 posiciones de memoria se verian asi: "H", "o", "l", "a", " ",x,x,x,x,x.
El motivo de este terminador nulo es bien sencillo, puesto que la cadena de caracteres que introducimos en la variable pude tener cualquier longitud (hasta el maximo declarado - 1), es la manera de saber donde termina realmente esta cadena. Osea en una intruccion printf por ejemplo, se imprimiran uno a uno todos los caracteres hasta llegar al caracter " ".
Como no existe el tipo "string" tampoco se puede hacer esto:
texto = "Opcion 1";
En C existen una serie de funciones ( strcpy, strcat, strcmp...etc) que sirven para operar con cadenas. Lo correcto seria:
strcpy(texto, "Opcion 1") ;
Esta funcion cargara en la variable una cadena ( o el contenido de otra variable)
Tu ejemplo quedaria asi:
char texto[10];
void mostrar_valores(void) {
lcd_putc(texto);
}
void main (void) {
if (input(PIN_B1)) strcpy(texto, "Opcion 1");
if (input(PIN_B2)) strcpy(texto, "Opcion 2");
}
En cuanto al otro problema con las interrupciones, no es necesario utilizar disable_interrupts() al entrar en una interrupcion, ya se ocupa el compilador de deshabilitar la interrupcion y de volver a habilitarla cuando sales de la funcion que maneja dicha interrupcion.
Y precisamente los warning te estan indicando eso, que se han desabilitado las interrupciones durante la llamada a la funcion de interrupcion, para prevenir que se produzca una segunda interrupcion ( lo cual es correcto ). Creo que el aviso es simplemente para indicarte esto y que no se puede producir otra interrupcion hasta que no salgas de esta.
Espero haberte ayudado en algo...
Saludos