TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: bitpic en 30 de Noviembre de 2012, 18:36:28
-
Buenas,
Estoy empezando a usar MPLAB X y me ocurre algo curioso, me aparecen errores marcando subrayando partes del código en rojo, pero si compilo y grabo en el PIC funciona correctamente.
¿Alguien sabe a que puede ser debido?
-
todavia no me he pasado al Mplab X, pero se me ocurre que si cliqueas o doblecliqueas el simbolo de exclamación quizas el mismo mplab te dirá porque la advertencia.
-
Si pasas el ratón por encima de las marcas rojas debe decirte cuál es el error
-
Me dice que no encuentra las librerias si las declaro así:
#include <xc.h>
en cambiosi las declaro con toda la ruta hasta llegar a la carpeta donde se encuentra no sale error:
#include <../../../../Program Files (x86)/Microchip/xc8/v1.11/include/xc.h>
Pensaba que estas librerias no hacia falta poner toda la ruta porque son de MPLAB. De hecho tengo otro programa con las mismas librerías que no me marca error.
No se, creo que hay algo más y se me escapa... o que MPLAB tiene un "bug".
-
Parece que se ha solucionado pero no me gusta como porque no se cual era el problema.
He creado un nuevo proyecto, he copiado exactamente el mismo código y ya no aparecen errores.
No se.... esperemos que no vuelva a ocurrir.
Saludos
-
Hola,
eso es debido al indexador, que a veces no indexa correctamente todos los ficheros y te aparecen mensajes de error normalmente debido a que no encuentra algún fichero o declaración de cierta variable/constante, etc. La verdad que a mi me ocurre bastante a menudo, pero como ya se lo que es no le hago mucho caso, ya que al compilar no da errores en la consola de salida. Otra opción si no quieres ver dichos mensajes, ya que a veces te pueden causar confusión, yo lo que hago es cerrar el entorno y volverlo abrir, al menos a mi esto último funciona.
Sinceramente al MPLABX le faltan aun bastantes cosillas por pulir.
Un saludo.
-
Pues vaya!! No es que me importe mucho ver el error, pero lo ideal es que no marque estos errores.
En un proyecto pequeño no importa, pero a medida que se haga mayor y más complejo puede ser un problema.
Es recomendable usar el MPLAB normal con C18? C18 tiene problemas similares o esta más depurado?
-
Pues vaya!! No es que me importe mucho ver el error, pero lo ideal es que no marque estos errores.
En un proyecto pequeño no importa, pero a medida que se haga mayor y más complejo puede ser un problema.
Es recomendable usar el MPLAB normal con C18? C18 tiene problemas similares o esta más depurado?
Yo utilizo el MPLAB normal con el C18 y nunca tuve ese problema, he tenido otros :lol: , en todo caso el C18 hace tiempo no se actualiza posiblemente nuevos dispositivos no esten soportados, es por eso que vengo utilizando el XC8 con el MPLAB normal.
Saludos
-
Este error te lo marca cuando cambias la configuracion (y creo que en otras ocasiones), pero cierras el mplabx y lo vuelves a abrir y solucionado. No es ningun error, digamos que es un bug, pero puedes compilar tranquilamente sin problemas.
-
En mi caso no se iba reiniciando el MPLAB X.
Bueno, de momento ahora funciona correctamente, espero no llevarme sorpresas.
Gracias por todo.
Saludos :-)
-
Otra duda...
Me estoy haciendo una librería LCD y para escribir una linea lo hago de la siguiente manera:
LCD_print("Hola Mundo");
y en la librería lo ejecuto de la siguiente manera:
void LCD_print(char cadena[array_lengh]){
int i;
for(i=0;i<array_lengh;i++){
LCD_char(cadena[i]);
cadena[i]=' '; // Borramos array
}
}
Me funciona pero me aparece este warning:
warning: illegal conversion between pointer types
Alguien sabe a que se debe? (por cierto array_lengh = 20)
Saludos y perdón por ser tan pesado.
-
porque "Hola mundo" pertenece a char*
prueba con LCD_print(char *cadena)
-
Ok, probare.
Y por entenderlo bien, esto crea un puntero verdad? Hay alguna manera de saber cuántos caracteres se han escrito en la cadena?
-
Hola, poniendo LCD_print(char *cadena) sigue apareciendo el mismo warning.
-
Vale!! todo arreglado, en vez de usar mi LCD_print() ahora lo hago usando el printf() de stdio y va perfecto.
Gracias.
Un saludo a todos!!!!!!
-
Segun su experiencia cual seria mejor el C18 o el XC8 no se cual de los 2 usar :P
-
Yo no he usado el C18 nunca, pero entiendo que debe ser muy parecido al XC8. Lo que pasa es que al ser el XC8 una versión nueva en ocasiones es normal que encuentres algún bug que deben resolver en próximas versiones.
Al ser las herramientas de microchip personalmente te recomendaría XC8 por que creo que esta sustituirá a C18 en un futuro, así ya aprendes la versión nueva.
Seguramente algún forero con experiencia en estas herramientas nos podrá orientar mejor.
Un saludo.
-
Confirmado, acabo de salir de una clase de MPLAB X y me confirman que el anterior MPLAB dejará de tener soporte el proximo año.
-
Confirmado, acabo de salir de una clase de MPLAB X y me confirman que el anterior MPLAB dejará de tener soporte el proximo año.
Ah si?, que lastima a mi me sigue gustando mas el MPLAB 8. pero bue
Saludos
-
Bueno tons a hecharle manos al mplabX y al XC8 :D
-
Hay un pequeño problema y no se cual es la razon, uso la siguiente instruccion y por alguna razon no se cumple ya que sin importar si el bit RB2 este en 0 o 1 salta a la siguiente instruccion
while (PORTBbits.RB2==1);
cambie a esta otra y tambien sigue en lo mismo
while (RB2==1);
Tal ves es que si la condicion tiene que realizarse con datos del tipo char, int o otros, por que aqui la estoy realizando con bits y un char, alguna ayuda?
Saludos.
-
Supongo que el puerto lo definiste como entrada previamente,
TRISBbits.TRISB2=1;
no veo por cual otro motivo no funcionaría ese while()
-
Yo probaría lo que te dice willynovi, comprueba que hayas definido bien el pin como entrada. Yo lo defino como entrada así TRISB0 = 0; y lo leo como tu haces PORTBbits.RB5
Si esta bien definido comprueba que realmente tienes un 1 en el pin con un voltimetro, no vaya a ser que sea problema de hardware.
En ocasiones el Mplab X tiene bugs y te vuelve loco, a mi me a ocurrido con varías cosas.
Prueba de ponerlo así, a ver si es porque faltan los corchertes.
while (PORTBbits.RB2==1){
}