Autor Tema: BUG EN CCS  (Leído 2157 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
BUG EN CCS
« en: 02 de Noviembre de 2006, 02:43:56 »
Hola a todos, hace unos 10 meses atras utilizando la version del CCS 3.241, realize un programa que decodifica tonos DTMF utilizando un decodificador externo.
En una de las funciones esta esta linea que misteriosamente dejo de funcionar hasta ahora en la version 4.013. :x
Despues de haber perdido mucho tiempo, dude en el compilador y efectivamente no andaba, finalmente descubri que el problema es en estas vesiones con la instruccion swap.

  dtmf[indice]=dtmf[indice]+tabla[swap(INPUT_C() &  0xF0)]; 
     

24 horas perdidas por un bug no reportado..... :mrgreen: :mrgreen: :mrgreen:



saludos
PikMan

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: BUG EN CCS
« Respuesta #1 en: 04 de Noviembre de 2006, 12:05:21 »
lo has reportado al foro oficial de ccs? puede que no lo sepan

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: BUG EN CCS
« Respuesta #2 en: 11 de Noviembre de 2006, 12:52:15 »
Quisiera saber si alguién le ha pasado lo siguiente con la versión 4

el detalle es con la librería lcd.c, saben que cuando se quiere colocar una cadena en la segunda linea del display se usa

putc("\f cadenalinea1\n")
putc("cadenalinea2")

pues bien cuando compilo y hago la simulación(y en el protoboard también), en el display me aparece la cadenalinea2 desplazada una caracter hacia la derecha, entonces tengo que usar:  putc("\b cadenaenlinea2") para arreglar la anomalía.

Salu2


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Flugplatz

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 279
    • Mi canal de YouTube
Re: BUG EN CCS
« Respuesta #3 en: 15 de Noviembre de 2006, 14:36:02 »
Pikman, no tengo ninguna intención de ofender, pero creo que hasta entiendo que el CCS se lie con esa linea de programa.

Después de 25 años haciendo programas, 15 de los cuales, son en equipo, si tengo clara una cosa, es que las lineas de código místicas, solo provocan quebraderos de cabeza, especiálmente al que las tiene que arreglar y no las ha hecho.

Aunque gastes algún byte más, prueba a hacerla pasito a pasito, y estoy casi seguro de que desaparece el error de compilación.

"dtmf[indice]=dtmf[indice]+tabla[swap(INPUT_C() &  0xF0)];"

int valor, entrada;

entrada=input_c();
valor = entrada & 0xF0;
dtmf[indice]=dtmf[indice]+tabla[valor];


o algo así ...  :mrgreen:

PalitroqueZ, aunque no he probado con el CCS4, hay una instrucción en la librería del LCD ... lcd_gotoxy(x,y) ... que, al menos en las versiones anterióres funciona estupéndamente.

Bueno, lo mismo, como aquí estáis un poco obsesionados con ahorrar memoria os parece una barbaridad, pero, en fín, queda dicho.

Al menos en mis "local dealers", creo que entre el 16f873 y el 18f876 hay una diferencia de 1 euro, lo mismo que entre el 18f242 y el 18f252 ...

Yo solo moñeo con los Pics, pero en fín, si andamos cortos de memoria, seguro que hay otras soluciones antes que las lineas de código místicas ... así, a botepronto, se me ocurre, comprar el siguiente de la familia.

De todas formas, con el putc() solo no creo que funcione, el stream por defecto de PrintF es la Usart ...

así que:

lcd_putc("\fPrueba CCS");

o

printf(lcd_putc, "\f%lu    ", cuenta);
« Última modificación: 15 de Noviembre de 2006, 14:52:40 por Flugplatz »
Mi canal de YouTube

Un saludo desde Madrid

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
Re: BUG EN CCS
« Respuesta #4 en: 17 de Noviembre de 2006, 22:48:43 »
Hola Flugplatz, pues al contrario, en lugar de ofenderme te agardezco contestar, pues si creo que llevas razon en lo que dices, solo que te cuento que esa obsesion de ahorrar memoria me viene pues solo llevo 4 años con CCS y empeze con el 16F84 y tenia 64 bytes de memoria ram y 1024 de rom, quiero desatacar que el compilador no muestra ningun error al compilar, eso seria bueno, lo que hace es decir que esta todo OK y el programa no funciona en la aplicacion.

Lo solucione asi:

       dtmf1=tabla[swap(INPUT_C() &  0xF0)];
       dtmf[indice]=dtmf[indice]|dtmf1;

Pero hasta la version 3.241

dtmf[indice]=dtmf[indice]+tabla[swap(INPUT_C() &  0xF0)];

Funcionaba y funciona correctamente, a pesar de que CCS para mi es la solucion por
exelencia siempre me encuentro con problemas de este tipo, que te hacen perder mucho
tiempo, ademas si no fuese por el ICD (in circuit debbuger), que me permite ver registros
paso a paso, puedes llegar a situaciones de locura, como medida preventiva, en la documentacion de mis programas incluyo la version del compilador usada, y ademas el .hex
para el micro.

Ahora te cuento otro enigma, tengo un programa que es para un 16F628, maneja un LCD de 2x16, y recibe y envia datos por el puerto serie, a otro microcontroaldor.

Y aqui va la estupidez, si compilo bajo windows 98 snd como sistema operativo, todo bien, si compilo usando XP, no funciona, no me he tomado el trabajo de buscar el error pero me parece una locura.

Te mando un gran saludo y gracias por compartir tu experiencia.







« Última modificación: 19 de Noviembre de 2006, 00:57:20 por pikman »
saludos
PikMan

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: BUG EN CCS
« Respuesta #5 en: 20 de Noviembre de 2006, 14:40:59 »
Bueno amigos les comento que el problema que tenía en con el caracter desplazado en la pantalla LCD, se quitó en la versión 4.014, en realidad no se si era un bug, aunque voy a revisar la laaarga lista de de cosas que siempre le arreglan y/o mejoran.


Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek