Autor Tema: Posibles "bugs" del compilador de CCS  (Leído 252591 veces)

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

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Posibles "bugs" del compilador de CCS
« Respuesta #60 en: 02 de Enero de 2010, 16:57:05 »
anotado Bruno  :)

Gracias.



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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Posibles "bugs" del compilador de CCS
« Respuesta #61 en: 04 de Marzo de 2010, 17:32:47 »
Estoy casi seguro de que éste es un bug.

Este código funciona perfectamente en otros compiladores (AVR):

Código: [Seleccionar]
      for (char j=0; j<8; j++)
      {
        if (Hello_World[i][k] & 1<<(7-j))    //Should there be a letter pixel here?
        {
          LCD_Out(0x00, 0);            //yes - draw it in black
          LCD_Out(0x00, 0);           
        }
        else
        {
          LCD_Out(0xFF, 0);            //no - draw background in white
          LCD_Out(0xFF, 0);
        }
      }

La parte clave es el desplazamiento hacia la izquierda de 7-j veces.

Por ejemplo, si se tiene un uno y se rota j=1...

0x01 << (7-1)

El resultado es

0x01 << 6 = 0x40

Pero CCS hace otra cosa que no entiendo. No puedo depurarlo porque estoy trabajando con un PIC24 y una LCD 3595.

Cosa rara, pero ya le encontré un workaround y aquí queda...

Código: [Seleccionar]
    for (k=0; k<5; k++) //Scan Columns
    {
    m=0x80;
      for (j=0; j<8; j++)
      {
        if (Hello_World[i][k] & (m>>j))    //Should there be a letter pixel here?
        {
          LCD_Out(0x00, 0);            //yes - draw it in black
          LCD_Out(0x00, 0);           
        }
        else
        {
          LCD_Out(0xFF, 0);            //no - draw background in white
          LCD_Out(0xFF, 0);
        }
      }
    }

El problema es que el pedazo de código que no funcionaba debía dibujar HELLO WORLD en la LCD Nokia pero en vez de eso dibujaba esto:

http://img169.imageshack.us/img169/6757/abcd0003z.jpg


Y con la corrección ya funciona bien:

http://img705.imageshack.us/img705/7476/abcd0004k.jpg


Datos del bug:
PIC24FJ64GB002
CCS 4.104

Por cierto, la LCD 3595 vino de una donación a la caridad de parte del Sr. Akenafab XD. Gracias ^^
« Última modificación: 04 de Marzo de 2010, 17:35:59 por migsantiago »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Posibles "bugs" del compilador de CCS
« Respuesta #62 en: 31 de Marzo de 2010, 13:40:02 »
Voy a advertir sobre algo que ya me ha cansado con CCS, y que me ha fallado, desde la version 4.088(incluso puede ser desde antes, no lo recuerdo) hasta la 4.104 que es la que uso ahora.

Intentar utilizar un puntero de una estructura para recorrer un array de dicha estructura resulta en DESASTRE. El problema es bastante evidente. El CCS muchas veces, no acomoda los elementos del array de la estructura consecutivamente en la RAM. Esto hace que obviamente luego, al querer recorrerlos con un puntero, el puntero se ubique en posiciones de memoria que no corresponden a ningun elemento del array, generando estragos en la ejecución del programa.
Considerense advertidos...
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Posibles "bugs" del compilador de CCS
« Respuesta #63 en: 31 de Marzo de 2010, 13:46:24 »
Hola Santiago. Seguramente sea un error del CCS.

Podrias hacer sino tambien,

Código: [Seleccionar]
      char j;
      char m=128;
     
      for (j=0; j<8; j++)
      {
        if (Hello_World[i][k] & m)    //Should there be a letter pixel here?
        {
          LCD_Out(0x00, 0);            //yes - draw it in black
          LCD_Out(0x00, 0);           
        }
        else
        {
          LCD_Out(0xFF, 0);            //no - draw background in white
          LCD_Out(0xFF, 0);
        }
        m/=2;
      }

Para eliminar por completo errores asociados a la funcion << y hacer el bucle un poquito mas rapido(aunque consumiendo un byte mas de RAM)...

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Posibles "bugs" del compilador de CCS
« Respuesta #64 en: 31 de Marzo de 2010, 13:48:31 »
Hola Bruno, es cierto que eliminaría el uso de <<, pero la división como tal introduciría más código rom... ¿?  :huh:

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Posibles "bugs" del compilador de CCS
« Respuesta #65 en: 31 de Marzo de 2010, 15:05:37 »
Hola Bruno, es cierto que eliminaría el uso de <<, pero la división como tal introduciría más código rom... ¿?  :huh:

No, para nada. El CCS lo traduce como una rotacion de 1 bit hacia la derecha(ya que recordemos que rotar 1 bit a la derecha es lo mismo que dividir el valor por dos). Es una optimizacion muy basica de los compiladores. Deberia solo generar 1 linea ASM en los PIC24(rotacion a la derecha sin carry, no se como sera en ese instruction set el nombre preciso)
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Posibles "bugs" del compilador de CCS
« Respuesta #66 en: 31 de Marzo de 2010, 15:53:01 »
OK, gracias.

Desconectado elperrov

  • PIC10
  • *
  • Mensajes: 6
Re: Posibles "bugs" del compilador de CCS
« Respuesta #67 en: 12 de Mayo de 2010, 00:19:04 »
Gracias Pocher por este aporte, hace dias que estoy luchando con esto, y no podia simular la logica. Te mereces un premio.

Saludos.

Maxi.

Este hilo se abre para intentar que otros no pierdan el tiempo que nosotros perdimos por culpa de un mal funcionamiento del compilador de CCS.

Particularmente es el compilador que más uso y es uno de los más usados, por no decir el que más.

1er PROBLEMA: mal funcionamiento de la interrupción por cambio de estado RB4..RB7


Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Posibles "bugs" del compilador de CCS
« Respuesta #68 en: 07 de Agosto de 2010, 21:19:11 »
La solución que propone Potcher para la interrupción de cambio de estado en [RB4;RB7] no es del 100% correcta en mi opinión.

Deberíamos intentar no recurrir al ASM dentro del compilador, debido a que movf port_b,0 es una instrucción que depende de la página actual donde se encuentre actualmente trabajando el programa. Si por algún motivo el programa está en otra página, podemos leer en lugar del PORTB el TRISB u otro dependiendo del uC en cuestión, fracasando en ese caso en la intención original de refrescar el latch interno del PORTB asociado a dicha interrupción.

Podríamos entonces, antes de hacer el movf, forzar el código al banco 0, pero si bien sirve para efectuar correctamente el movf, entramos ahora con un potencial problema, debido a que le hemos cambiado el banco al CCS, quien seguramente no contemple ésto, y cuando continúe con su código compilado puede afectar a las variables incorrectas debido al cambio de banco no contemplado por él. Entonces, completamente seguro sería guardar el banco que está usando el CCS en una variable auxiliar, pasar al banco0, leer el puerto y restaurar el banco antes de devolverle el control al compilador...

Personalmente yo uso:
   input_b();

y el mirando el código ensamblado hace precisamente éso. Lee el PORTB.

Un saludo.
« Última modificación: 07 de Agosto de 2010, 21:22:04 por BrunoF, Razón: Correcciones ortográficas »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado chasmam

  • PIC10
  • *
  • Mensajes: 3
Re: Posibles "bugs" del compilador de CCS
« Respuesta #69 en: 20 de Agosto de 2010, 20:33:59 »
hola a todos, he estado utlizando el compilador ccs 4.093 y 4.1 y veo que estos dos ultimos presentan problemas , he intentado probar el algoritmo ya implementado del la FFT y veo que presenta problemas en el calculo de los twid factors, debido a que utiliza las funciones seno y coseno para crearlos respectivamente.  si ha alguien le funciona perfectame este ejemplo hacerlo saber, gracias... el elemplo se llama EX_FFT, parece que a nadie le a funcionado :>( :shock:

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Posibles "bugs" del compilador de CCS
« Respuesta #70 en: 05 de Noviembre de 2010, 12:35:36 »
Estoy trabajando con el PIC18F45K22 en la versión "actual"  ;-)


Se ha enviado un correo a los de CCS y se supone ya tomaron el caso, inclusive asignaron un número de identificación para el seguimiento.

El problema es con la nueva definición de estos k22 (1.8 hasta 5.5 de riel a riel) en sus registros. Para los k20 (3.3v) los registros no cambian.

Acá dejo lo que se envió (en el adjunto).


Ahora estoy teniendo problemas con el UART#1, ya que es posible enviar información pero cuando se pretende recibir, no prospera el asunto. Se publicarán los resultados pero quizá sea el domingo.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado facuenta

  • PIC10
  • *
  • Mensajes: 6
Re: Posibles "bugs" del compilador de CCS
« Respuesta #71 en: 18 de Diciembre de 2010, 13:11:46 »
Yo tuve un problema con la biblioteca flex_lcd.c. Estoy programando el nuevo PIC 16F1936 en CCS y cuando probé de usar el MPLAB SIM para medir los tiempos con el STIMULUS agregándole los dos canales ADC... en la simulación se me quedaba en la biblioteca flex_lcd.c como si hubiera un lazo infinito... la cuestión que me dijeron que el MPLAB SIM toma al LCD como si estuviera apagado entonces esa biblioteca(flex_lcd.c) tiene un bug ahí??? Alguien sabe como solucionar eso?


Me estoy volviendo loco para medir los tiempos que necesito calcular para agregarle a mi programa un reloj... y el "PIC SIMULATOR IDE" todavía no cuenta con este microcontrolador y la opción que me quedaba hasta donde se es el MPLAB SIM ya que los del CCS y del PROTEUS no son de tiempo exactos ya que dependen del reloj de la máquina.

Si hay algún experto que me lo pueda responder se lo voy a agradecer.

Saludos,
Facundo

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Re: Posibles "bugs" del compilador de CCS
« Respuesta #72 en: 28 de Diciembre de 2010, 20:30:22 »
Hola! ya postee mi duda por fuera de este hilo, pero quisiera pedir ayuda aca tambien, no repito el post, simplemente dejo el link de mi consulta, he estado pensando que podria ser un bug del CCS tambien... ustedes diran!

Consulta sobre PPS e intercambio de puertos para UART

Gracias!!

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Posibles "bugs" del compilador de CCS
« Respuesta #73 en: 29 de Diciembre de 2010, 16:13:57 »
en la simulación se me quedaba en la biblioteca flex_lcd.c como si hubiera un lazo infinito... la cuestión que me dijeron que el MPLAB SIM toma al LCD como si estuviera apagado entonces esa biblioteca(flex_lcd.c) tiene un bug ahí??? Alguien sabe como solucionar eso?



¿y lo has probado en físico?

recuerda que la lcd debe responder al pic, y si no le das esa respuesta manalmente por mplab-sim, siempre se quedará esperando

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

Desconectado facuenta

  • PIC10
  • *
  • Mensajes: 6
Re: Posibles "bugs" del compilador de CCS
« Respuesta #74 en: 30 de Diciembre de 2010, 08:17:42 »
Muchas gracias PalitroqueZ!
Voy a probar a ver si es eso.
Saludos,
Facundo


 

anything