TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micro_pepe en 12 de Enero de 2019, 17:47:47

Título: Cosa extraña con salidas en xc8 pic12f683
Publicado por: micro_pepe en 12 de Enero de 2019, 17:47:47
Tengo el siguiente codigo, al depurarlo si Steps vale 0, entra en el if, ejecuta la primera asignacion, y se salta a la segunda asignación de if Step==7, si lo implemento con un switch, ocurre exactamente lo mismo.

Código: C
  1. if (Steps == 0) {
  2.             //GPIO = 0b00100000;
  3.             IN_1 = 0;
  4.             IN_2 = 0;//De aquí se salta a....
  5.             IN_3 = 0;
  6.             IN_4 = 1;
  7.         } else if (Steps == 1) {
  8.  
  9.             //GPIO = 0b00110000;
  10.             IN_1 = 0;
  11.             IN_2 = 0;
  12.             IN_3 = 1;
  13.             IN_4 = 1;
  14.         } else if (Steps == 2) {
  15.  
  16.             //GPIO = 0b00010000;
  17.             IN_1 = 0;
  18.             IN_2 = 0;
  19.             IN_3 = 1;
  20.             IN_4 = 0;
  21.         } else if (Steps == 3) {
  22.  
  23.             //GPIO = 0b00010100;
  24.             IN_1 = 0;
  25.             IN_2 = 1;
  26.             IN_3 = 1;
  27.             IN_4 = 0;
  28.         } else if (Steps == 4) {
  29.  
  30.             //GPIO = 0b00000100;
  31.             IN_1 = 0;
  32.             IN_2 = 1;
  33.             IN_3 = 0;
  34.             IN_4 = 0;
  35.         } else if (Steps == 5) {
  36.  
  37.             //GPIO = 0b00000110;
  38.             IN_1 = 1;
  39.             IN_2 = 1;
  40.             IN_3 = 0;
  41.             IN_4 = 0;
  42.         } else if (Steps == 6) {
  43.  
  44.             //GPIO = 0b00000010;
  45.             IN_1 = 1;
  46.             IN_2 = 0;
  47.             IN_3 = 0;
  48.             IN_4 = 0;
  49.         } else if (Steps == 7) {
  50.  
  51.             //GPIO = 0b00100010;
  52.             IN_1 = 1;
  53.             IN_2 = 0;//..... a aquí.
  54.             IN_3 = 0;
  55.             IN_4 = 1;
  56.         } else {
  57.             //GPIO = 0b00000000;
  58.             IN_1 = 0;
  59.             IN_2 = 0;
  60.             IN_3 = 0;
  61.             IN_4 = 0;
  62.         }

las salidas las tengo de esta manera:

Código: C
  1. #define IN_1 GPIObits.GP1
  2.  
  3. #define IN_2 GPIObits.GP2
  4.  
  5. #define IN_3 GPIObits.GP4
  6.  
  7. #define IN_4 GPIObits.GP5

Y tengo esta configuración, con oscilador interno:

Código: C
  1. OSCCON = 0b00010111;
  2.     GPIO = 0x00;
  3.     CMCON0 = 0b11111111; //Canal 0 analogico, resto digital
  4.     ANSEL = 0b00000001; //Canal 0 analogico, resto digital
  5.  
  6.     TRISIO = 0b00000001;
  7.    
  8.     IOC = 0x00;

Si saco las asignaciones de los if, haciendo algo así, actualiza las salidas:

Código: C
  1. IN_1 = 0;
  2. IN_2 = 0;
  3. IN_3 = 0;
  4. IN_4 = 1;

No sé donde puede estar el error.

Saludos!!!
Título: Re:Cosa extraña con salidas en xc8 pic12f683
Publicado por: KILLERJC en 12 de Enero de 2019, 21:26:08
Podes aportar el disassembler?

Sino deberias hacerlo de otra forma.. Prefiero un array con los valores y de alli asignarlo a GPIO todo junto.

Me ha sucedido que la depuracion suele hacer cualquier cosa... A veces ocurre :P
Título: Re:Cosa extraña con salidas en xc8 pic12f683
Publicado por: micro_pepe en 13 de Enero de 2019, 15:33:40
Podes aportar el disassembler?

Sino deberias hacerlo de otra forma.. Prefiero un array con los valores y de alli asignarlo a GPIO todo junto.

Me ha sucedido que la depuracion suele hacer cualquier cosa... A veces ocurre :P

Supongo sea el archivo .lst, lo renombro para poder adjuntarlo.

Lo del array no lo he probado aun.

Gracias!!!
Título: Re:Cosa extraña con salidas en xc8 pic12f683
Publicado por: sander en 14 de Enero de 2019, 22:42:52
no sera que esta haciendo una optimizacion?, ya que es codigo repetitivo,
Código: [Seleccionar]
IN_1 = 0;
IN_2 = 0;
IN_3 = 0;
IN_4 = 1;
Código: [Seleccionar]
IN_1 = 1;
IN_2 = 0;
IN_3 = 0;
IN_4 = 1;
entre los dos solo varia un bit, tal vez el compilador se esta pasando de listo y busca no repetir codigo.
Título: Re:Cosa extraña con salidas en xc8 pic12f683
Publicado por: KILLERJC en 15 de Enero de 2019, 00:04:49
Código: [Seleccionar]
717                           ;motor.c: 40: GPIObits.GP1 = 0;
   718  0747  1283                bcf 3,5 ;RP0=0, select bank0
   719  0748  1085                bcf 5,1 ;volatile
   720                           
   721                           ;motor.c: 41: GPIObits.GP2 = 1;
   722  0749  1505                bsf 5,2 ;volatile
   723  074A                     L3:
   724                           
   725                           ;motor.c: 42: GPIObits.GP4 = 1;
   726  074A  1605                bsf 5,4 ;volatile
   727  074B  2F78                goto L7


Segun el listing no lo optimizo
Título: Re:Cosa extraña con salidas en xc8 pic12f683
Publicado por: AccioRw en 15 de Enero de 2019, 05:20:19
Si estas usando XC8, puedes subir el proyecto entero micro_pepe o mandarmelo por privado ?
Título: Re:Cosa extraña con salidas en xc8 pic12f683
Publicado por: micro_pepe en 15 de Enero de 2019, 09:24:22
Si estas usando XC8, puedes subir el proyecto entero micro_pepe o mandarmelo por privado ?

Adjunto el proyecto.

Saludos!!!
Título: Re:Cosa extraña con salidas en xc8 pic12f683
Publicado por: AccioRw en 16 de Enero de 2019, 07:05:54
Hola micro_pepe, lo que te esta pasando es una optimización de XC8, al ser el mismo código salta a la ultima opción así optimiza espacio, si cambias el step7 por algo diferente veras que ya no te salta a ese sino a otro que tenga esa terminación.

Mis pruebas fueron con el XC8 v1.33
  - Tienes que ingresar para ver archivos adjuntos -  
  - Tienes que ingresar para ver archivos adjuntos -  

En la imágenes adjuntas silo he hecho bien y se ve algo... te muestro donde esta esa optimización y como quitarla, al quitarla verás que ya hace tal cual lo que tu tienes puesto pero aumenta el uso de memoria flash casi 100bytes haciendo lo mismo por lo tanto yo las dejaría puestas salvo que las quieras quitar por comodidad para debug ;)
Un Saludo !!
Título: Re:Cosa extraña con salidas en xc8 pic12f683
Publicado por: micro_pepe en 17 de Enero de 2019, 08:20:55
Eso era AccioRw, quitando esa opción depura perfecto  :-/ :-/ :-/, gracias.

Las otras dos opciones Speed y Debug, ¿para que sirven?

Saludos!!!
Título: Re:Cosa extraña con salidas en xc8 pic12f683
Publicado por: AccioRw en 17 de Enero de 2019, 09:22:14
Bueenas, la opción de Debug optimiza el código para hacer debug, sin tener en cuenta tanto la optimización del código, imagino que te cambiara el tamaño de lo que te ocupe el programa en la flash incluso.
La otra opción de Speed va relacionada con la optimización "+space" que viene activada por defecto, cuando actives la optimización de velocidad te la cambiara por la de espacio.
Las optimizaciones que en caso de "Speed" solo se contestarte lo que de lógica puede pensar cualquiera, imagino que colocara variables mas comunes en registros de acesos mas rápidos y ese tipo de cosas...

Esa pantalla que ves ahí suele cambiar con las versiones del compilador pero suelen ser comunes con el tema de optimización y se suelen encontrar esas opciones de una u otra forma sea ese o cualquier otro compilador. :)