Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Ya sé que el título del hilo no es muy descriptivo, pero ese compilador me tiene frito.
Uso el CCS 3,236, estoy adaptando unas rutinas para el control de displays LCD que usen el chip HD44780A (o sea la mayoría de los NO gráficos). Estas rutinas funcionan perfectamente con Keil para i8051, y también para PIC, peeeero no consigo que el CCS me compile esto:
LcdMsg ("Hola Heli");
Evidentemente quiero que el programa me salude tras inicializar el display, para ver que funciona. la función LcdMsg está definida como:
void LcdMsg (char *mensaje);
El error es: Attempt to create a pointer to a constant
¡Ya sé que estoy intentando crear un puntero a una constante, coño, para eso quiero un compilador, para que lo haga él y no lo tenga que ensamblar yo!!!
Seguro que es alguna manía del compilador, que con mi inexperiencia no consigo detectar. Con Keil y i8051 (que tiene memoria separada para código y datos) compila perfectamente y puedes trabajar lo mismo con constantes que con variables, el compilador genera el código adecuado para cada caso.
¿Alguien sabe como puedo enviar a una función una constante o una variable indistintamente? La función printf() funciona así y no da error.
En display.h hay:
/* Envía una cadena de caracteres al display */
void LcdMsg (char *mensaje);
En displah.c:
/*==========================================================================*/
/* Visualiza un mensaje en la posicion actual del cursor */
/*==========================================================================*/
void LcdMsg (char *mensaje)
{
while (*mensaje)
{
if ((cursor%ADISPLAY)==0)
LcdGoto();/* va a la posicion actual del cursor (cmmbia linea) */
LcdChar (*mensaje++);
}
}
En main.c
printf("rnReciclator1...rn");
LcdMsg ("Hola Heli"); //<<<<<< ¿Como lo hago?
while (TRUE) // Bucle principal
{
if (Kbhit()) ProcesaComando(); // Si hay comando en el puerto serie
}
ja ja ja, ya me imaginaba yo que no iban por donde yo decia los tiros Heli, me parecia demasiado obvio... je je je
Aun asi esa forma de trabajar con ficheros es similar a los de cabecera .H, de hecho yo tengo .H con operaciones basicas como los movimientos de los motores de los robots que hago, o mi sistema de comunicacion...