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

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

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1697
Re: Posibles "bugs" del compilador de CCS
« Respuesta #120 en: 08 de Abril de 2012, 18:24:55 »
bueno, no he leido el post completo para ver si el bug esta repetido :oops:
Version 4.128
Bug: Problema con el seteo de bits en el ADCON1 al configurar voltajes externos para el ADC

Resulta que he querido configurar el ADC del pic18f2550 con voltajes de referencias externos diferentes de 5v y 0V. El CCS no setea los bit completamente, al menos para este caso, he usado la instruccion
Código: CSS
  1. SETUP_ADC(ADC_CLOCK_INTERNAL|VREF_VREF);
Los bits quedan configurados por defecto, es decir vref+=5v y Vref-=0

Solucion planteda:
En el encabezado inicial del programa definir el registro ADCON1 y posteriormente los bit a setear, que son el bit4 y bit5, correspondientes a VCFG0 y VCFG1
Código: CSS
  1. #BYTE ADCON1 =0XFC1
  2. #BIT  VCFG1=ADCON1.5
  3. #BIT  VCFG0=ADCON1.4

En el programa principal:
Código: CSS
  1. VCFG1=1;
  2. VCFG0=1;

Cambio y fuera! ;-)


Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Posibles "bugs" del compilador de CCS
« Respuesta #121 en: 25 de Mayo de 2012, 11:37:30 »
Hola amigos, me sucede algo muy extraño con el PIC 12F675, cuando ejecuto la función menset el puerto GPO,0 se pone en cero

Código: C
  1. set_tris_a(0b111110);
  2. bit_set(gpio,0);
  3. memset(dato_recibido, 0, sizeof(dato_recibido));

este es el programa completo, ven algo extraño ?

Código: C
  1. #include <12f675.h>
  2.  
  3. #use delay(clock=4000000, restart_wdt)
  4. #fuses xt,wdt,brownout,put,protect,nomclr
  5.  
  6. #byte   gpio = 0x05
  7.  
  8. #define led_tecla gpio,0
  9.  
  10. int dato_recibido[5];
  11.  
  12. void main()             //Rutina principal
  13. {
  14. set_tris_a(0b111110);
  15. bit_set(gpio,0);
  16. memset(dato_recibido, 0, sizeof(dato_recibido));
  17.  
  18. while(true)            
  19.         {
  20.                 delay_ms(10);
  21.         }
  22. }

Gracias por su interés.

Saludos
« Última modificación: 25 de Mayo de 2012, 13:41:52 por Diego E. »

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Posibles "bugs" del compilador de CCS
« Respuesta #122 en: 25 de Mayo de 2012, 13:56:31 »
Si utilizo el PIC16F876 esto no sucede, viendo el código desensamblado encuentro diferencias entre las funciones memset

PIC12F675

Código: ASM
  1. .................... memset(dato_recibido, 0, sizeof(dato_recibido));
  2. 0035:  CLRF   05
  3. 0036:  MOVLW  24
  4. 0037:  MOVWF  04
  5. 0038:  CLRF   20
  6. 0039:  MOVLW  05
  7. 003A:  MOVWF  21
  8. 003B:  GOTO   004

PIC16F876A

Código: ASM
  1. ....................    memset(dato_recibido, 0, sizeof(dato_recibido));         
  2. 019B:  MOVLW  2F
  3. 019C:  MOVWF  04
  4. 019D:  BCF    03.7
  5. 019E:  CLRF   77
  6. 019F:  MOVLW  05
  7. 01A0:  MOVWF  78
  8. 01A1:  CALL   0C7

En el PIC12F675 se ve que la función introduce CLRF 05 (limpiar el gpio), que será lo que sucede ?.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Posibles "bugs" del compilador de CCS
« Respuesta #123 en: 25 de Mayo de 2012, 20:13:42 »
Hola.

Yo tuve problemas con esa funcion en otros micros .. por eso no la volvi a utilizar ... mejor recurri a un ciclo for

Saludos
El papel lo aguanta todo

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Posibles "bugs" del compilador de CCS
« Respuesta #124 en: 25 de Mayo de 2012, 22:54:39 »
Hola Miguel, si, me deja desconcertado esto y créame que me genera una gran desconfianza utilizarla.

Saludos.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Posibles "bugs" del compilador de CCS
« Respuesta #125 en: 25 de Mayo de 2012, 23:13:58 »
Hola Miguel, si, me deja desconcertado esto y créame que me genera una gran desconfianza utilizarla.

Saludos.

que vercion tienes del CCS

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Posibles "bugs" del compilador de CCS
« Respuesta #126 en: 25 de Mayo de 2012, 23:23:02 »
Hola amigo, tengo la versión 4.130, he probado con los siguientes PIC y funciona mal 12F675-629-676, con 628-676 funciona bien

Saludos.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Posibles "bugs" del compilador de CCS
« Respuesta #127 en: 25 de Mayo de 2012, 23:40:45 »
Hola amigo, tengo la versión 4.130, he probado con los siguientes PIC y funciona mal 12F675-629-676, con 628-676 funciona bien

Saludos.

por que no regresas a la 4.084 es la mas estable que hay

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Posibles "bugs" del compilador de CCS
« Respuesta #128 en: 26 de Mayo de 2012, 13:03:35 »
Porqué dices que esa versión es la más estable ?, la usas ?

Saludos

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Posibles "bugs" del compilador de CCS
« Respuesta #129 en: 26 de Mayo de 2012, 13:08:11 »
Porqué dices que esa versión es la más estable ?, la usas ?

Saludos

si es con la que trabajo, instale la 0.94 hasta la 131, pero siempre hay algo que falla, y las pruebas las realizo con los Booloaders de microchip.

cuando compilo los ejemplos del CDC en proteus trabaja normal, pero al pasar el hex al micro no realiza nada siempre pasa eso con los bootloader, por lo mismo si sale algo nuevo y no trabajo con los boots y a se que alguna libreria o instruccion siempre handa mal.

con la 84 no he tenido ningun problema y hasta el momento no me ha fallado en nada

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Posibles "bugs" del compilador de CCS
« Respuesta #130 en: 26 de Mayo de 2012, 13:45:23 »
Muchas gracias, lo tendré en cuenta

esto me responden en el foro de CCS http://www.ccsinfo.com/forum/viewtopic.php?p=162778#162778

Saludos.

Desconectado swivels

  • PIC10
  • *
  • Mensajes: 2
ayuda
« Respuesta #131 en: 11 de Noviembre de 2012, 16:02:41 »
hola que tal, tengo una duda a ver si me pueden ayudar, quiero hacer un programa en c, para iluminar una escalera de mi casa con x cantidad de escalones sera un led por cada uno, tendre un interruptor (eso lo manejare externo, aparte con una compuerta)  al inicio y al final de la escalera, con un display 7 segmentos uno en cada extremo, con el selector activo la iluminacion de la escalera a traves de un interruptor, en el display cada numero es  una manera diferente de iluminar los escalones y asi quedara hasta que se desactive. habran 9 tipos diferentes de que se ilumine la escalera. bueno de antemano le doy las gracias!!! saludos

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: ayuda
« Respuesta #132 en: 11 de Noviembre de 2012, 22:25:54 »
hola que tal, tengo una duda a ver si me pueden ayudar, quiero hacer un programa en c, para iluminar una escalera de mi casa con x cantidad de escalones sera un led por cada uno, tendre un interruptor (eso lo manejare externo, aparte con una compuerta)  al inicio y al final de la escalera, con un display 7 segmentos uno en cada extremo, con el selector activo la iluminacion de la escalera a traves de un interruptor, en el display cada numero es  una manera diferente de iluminar los escalones y asi quedara hasta que se desactive. habran 9 tipos diferentes de que se ilumine la escalera. bueno de antemano le doy las gracias!!! saludos

no creo que este sea un buen sitio para pedir lo que buscas... hay subforos en los cuales estaria mejor este tema, ademas nadie te va ha hacer la faena, como es de comprender....

lo que te recomiendo es que expongas esquemas, codigo que tengas hecho y las dudas.... que ninguno se negara a ayudarte ante cualquier problema pero todos se negaran a dartelo masticado...
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado matyvico

  • PIC10
  • *
  • Mensajes: 20
Re: Posibles "bugs" del compilador de CCS
« Respuesta #133 en: 25 de Enero de 2013, 01:27:37 »
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 ningún elemento del array, generando estragos en la ejecución del programa.
Considerense advertidos...

Primero que nada este es mi primer posteo en el foro, aunque siempre lo segui muy de cerca por diversos motivos y siempre me sacaron del apuro sin necesidad de que posteara (usando el buscador, como corresponde). Perdón por resucitar el tema pero leyendo justo encontré algo similar a lo que me sucedió.

Volviendo un poquito mas atrás (perdón por eso), a al texto citado, escrito por BrunoF, quiero votar a favor del bug que encontró porque me parece que en una aplicación que estoy desarrollando (un generador de señales) me sucede que para un menú que genero para mostrar en un LCD de NOKIA 1100 genero una función para reutilizar código, ya que son muchas las posibilidades y los items de los menúes que pienso incluir. Con un botón (interrupción externa por RB0) se llama a la función menu(opc) que usa como parámetro un char global (o esa es la idea) donde se encuentran los nombres de los items a mostrar en el LCD, la función lo que hace es ubicar el "cursor" en el LCD y enviar a escribir el elemento sub-i de ese char. El programa es el siguiente:

Código: [Seleccionar]
char opc[7][15];

#INT_EXT NOCLEAR
void EXT_isr()
{
   char opc[7][15]={"Tipo de onda","Frecuencia","Periodo","","","",""}; //VECTOR GLOBAL
   while(!bit_test(PORT_B,0)){delay_us(200);}
   disable_interrupts(INT_EXT1 && INT_EXT2);
   clear_interrupt(INT_EXT);
   menu(opc);
}

void menu(char opc)
{
   int i;

   disable_interrupts(INT_EXT);
   disable_interrupts(INT_EXT1);
   disable_interrupts(INT_EXT2);
   lcd_clear();
   gotoxy(0,0);
   printf(print_char,">");
   for(i=0;i<=6;i++)
   {
         gotoxy(10,i);
         printf(print_char,opc[i]);
   }
}

Se que por ahí no tiene punto de comparación pero este "mismo" (muy muy muy similar) pedacito de código lo usé unos años atrás para un proyecto hecho en Borland C, de cualquier manera debería funcionar.

Yendo al grano, lo que me sucede es que en "la vida real" no se escribe el menú, y en el proteus , observando el contenido del array pasan cosas muy raras, o hace referencia (como un puntero) a la primera letra del primer elemento (en este caso "T"), o a veces me genera la matriz de 7 x 15 pero cuando se hace el llamado a la función menu() el array char pierde todo su contenido y la matriz completa (o el puntero) queda con valores de caracter nulo: '\0'. Lo que me asombra de todo esto, es que la variable que yo defino es de tipo GLOBAL! no debería cambiarse (a no ser que reemplace los valores, supongo... por lo que tengo entendido).

La forma que encontré de solucionarlo es generando el vector char opc[7][15]={"Tipo de onda","Frecuencia","Periodo","","","",""}; (o lo que sea que le quiera mandar a escribir) de forma LOCAL dentro de cada función que requiera a su vez llamar a la función menu() y escriba lo que sea que este en su vector opc en el LCD. Ejemplo de código (QUE FUNCIONA PERFECTO):

Código: [Seleccionar]
#INT_EXT NOCLEAR
void EXT_isr()
{
   while(!bit_test(PORT_B,0)){delay_us(200);}
   output_toggle(PIN_C2);
   disable_interrupts(INT_EXT1 && INT_EXT2);
   clear_interrupt(INT_EXT);
   menu();
}

void menu()
{
   int i;
   char opc[7][15]={"Estado","Tipo de onda","Amplitud","Frecuencia","Periodo","Duty cicle",""};

   disable_interrupts(INT_EXT);
   disable_interrupts(INT_EXT1);
   disable_interrupts(INT_EXT2);
   lcd_clear();
   gotoxy(0,0);
   printf(print_char,">");
   for(i=0;i<=6;i++)
   {
         gotoxy(10,i);
         printf(print_char,opc[i]);
   }
}

Esos dos pedazos de código los probé para las versiones 4.093 (actual) y 4.130 (los peores errores imaginables) y para la simulación el Proteus versión 7.8 SP2 (probé la 7.10 SP0 y fué desastrosa su estabilidad). El PIC es un 18F4550 y creo que no me olvido de ningún dato más...

Gracias de antemano y espero le encontremos solución!
« Última modificación: 25 de Enero de 2013, 01:40:08 por matyvico »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Posibles "bugs" del compilador de CCS
« Respuesta #134 en: 25 de Enero de 2013, 10:48:44 »
Hola matyvico,

tal vez no sea ayuda ni consuelo, pero podrías intentar forzando al CCS a que guarde el array justo alineado al inicio de un banco de RAM, de esa forma por ahi el CCS te lo pone secuencialmente de corrido. Había una sentencia en CCS para indicar la posición RAM pero no la recuerdo. Tal vez es tan evidente como #RAM. Si no la encontrás decime que la busco en algún proyecto pasado.

Un gusto haberte conocido la voz.

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.


 

anything