Autor Tema: Cosa extraña con salidas en xc8 pic12f683  (Leído 3552 veces)

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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Cosa extraña con salidas en xc8 pic12f683
« 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!!!
« Última modificación: 12 de Enero de 2019, 17:51:14 por micro_pepe »
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Cosa extraña con salidas en xc8 pic12f683
« Respuesta #1 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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re:Cosa extraña con salidas en xc8 pic12f683
« Respuesta #2 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!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re:Cosa extraña con salidas en xc8 pic12f683
« Respuesta #3 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.
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Cosa extraña con salidas en xc8 pic12f683
« Respuesta #4 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

Desconectado AccioRw

  • PIC16
  • ***
  • Mensajes: 165
Re:Cosa extraña con salidas en xc8 pic12f683
« Respuesta #5 en: 15 de Enero de 2019, 05:20:19 »
Si estas usando XC8, puedes subir el proyecto entero micro_pepe o mandarmelo por privado ?

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re:Cosa extraña con salidas en xc8 pic12f683
« Respuesta #6 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!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado AccioRw

  • PIC16
  • ***
  • Mensajes: 165
Re:Cosa extraña con salidas en xc8 pic12f683
« Respuesta #7 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
 

* i1.png
(25.3 kB, 565x394 - visto 399 veces)

 

* i2.png
(16.99 kB, 881x433 - visto 381 veces)


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 !!

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re:Cosa extraña con salidas en xc8 pic12f683
« Respuesta #8 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!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado AccioRw

  • PIC16
  • ***
  • Mensajes: 165
Re:Cosa extraña con salidas en xc8 pic12f683
« Respuesta #9 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. :)