TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jmiguel en 18 de Enero de 2010, 06:30:57

Título: Funcionamiento anomalo con variables
Publicado por: jmiguel en 18 de Enero de 2010, 06:30:57
Hola, no estoy acostumbrado a trabajar con pics, estoy trabajando con las siguientes herramientas:

- Pic18f6527
- MPLAB 8.10
- ICD2
- Compilador MCC18 (versión gratuita)

La cuestión es la siguiente: Tras realizar del parte del desarrollo de una aplicación para comunicacionas con una UART, al depurarla no ocurren cosas raras, que parecen estar relacionadas con accesos a zonas de memoria de datos incotroladas y esto produce alteraciones de variables.
Mas concretamente tenemos una variable global tipo char y con un codigo equivalente a el siguiente en el main y con un while(1):
main()
{
   while(1)
  {
     if(z<10)
     z++;


  }


pues bien cuando paramos en depuración el código y visualizamos la variable z resulta que vale un valor mayor de 10 :shock:, lo cual por código es imposible ya que no se toca en ningun otro sitio.
Por si fuese de ayuda se esta trabajando con dos irq una de alta prioridad(la de RX) y otra de baja prioridad(un timer de 1ms), y se estan ubicando variables en dos bancos de memoria.
Creemos que puede ser algun problema con el tema de la gestión de bancos de memoria, stack o algo asi, ya que con otros micros que he trabajado que no gestionan la memoria en bancos no he tenido estos problemas .

Gracias por la atención prestada.
Título: Re: Funcionamiento anomalo con variables
Publicado por: Suky en 18 de Enero de 2010, 09:16:39
He utilizado el compilador C18 y nunca me ha paso lo que comentas  :shock: Asegurate de que el compilador entienda correctamente que involucra al if por las dudas  :?

Despues habría que ver el resto del código, pues si trabajas con punteros y de forma incorrecta puede ser que estes modificando la variable.

Saludos!
Título: Re: Funcionamiento anomalo con variables
Publicado por: migsantiago en 18 de Enero de 2010, 11:42:32
Cuando declares la variable z globalmente, declárala igual a cero.

char z=0;

Algunos compiladores las declaran pero no las inicializan.
Título: Re: Funcionamiento anomalo con variables
Publicado por: jmiguel en 18 de Enero de 2010, 12:10:57
Ya la he inicializado y ocurre lo mismo, no se sin tendra que ver algo lo de la gestión de bancos y las instrucciones extendidas
Título: Re: Funcionamiento anomalo con variables
Publicado por: Suky en 18 de Enero de 2010, 12:19:35
Danos más información, código, para ver si en algún lado se pueda estar modificando la variable. La versión gratuita no soporta instrucciones extendidas.


Saludos!
Título: Re: Funcionamiento anomalo con variables
Publicado por: jmiguel en 18 de Enero de 2010, 13:54:41
Pregunta ¿ Tengo que tener alguna precaución si tengo declaradas variables en dos bancos distintos que no son el por defecto ? , o el compilador se encarga de esto??, y otra cosa que compilador me recomendais entre el del HITECH, CCS y MCC18. No necesito mucha potencia, necesito uno intuitivo y de facil uso y sobre todo transparencia.

Gracias
Título: Re: Funcionamiento anomalo con variables
Publicado por: Suky en 18 de Enero de 2010, 14:06:49
Hitech no conozco, C18 es transparente con respecto a que ves claramente los registros utilizados y como se hace, en cambio CCS es muuuuy simple de usar pero no es transparente, es mi opinión.  :mrgreen:


Saludos!
Título: Re: Funcionamiento anomalo con variables
Publicado por: PalitroqueZ en 18 de Enero de 2010, 15:38:40
se que en la ayuda del C dice que no es necesario, pero yo acostumbro a colocar el statment del if entre llaves, así sea una instrucción la que valide.




Título: Re: Funcionamiento anomalo con variables
Publicado por: omix en 18 de Enero de 2010, 18:07:02
hola,
comentas que tienes una interrupción de alta prioridad y otra de baja, yo de ti revisaria que no haya ninguna errata para ese micro relacionada con la interrupción de alta prioridad, ya que varios micros de la seria 18F tienen un problemilla con la gestion de la interrupción de alta prioridad que puede hacer que ocurra cualquier cosa. Te lo digo por experiencia, yo con el 18F8722, 18F6722  he tenido problemas  tal que una simple comparación como esta if (1 == 1) y el micro decia que era falso, y despues de darle muchas vueltas, creyendo que era cosa del compilador resulta que era por culpa de una interrupcion de alta prioridad que tenia, en mi caso era la INT0.
La solución pasa por no usar interrupciones de alta prioridad o aplicar los parches mediante software que propone microchip en el documento de errata.

Saludos.
Título: Re: Funcionamiento anomalo con variables
Publicado por: jmiguel en 18 de Enero de 2010, 18:59:41
Me puedes mandar el link al documento de errata de microchip??, pues si no se pueden utilizar las prioridades de alta prioridad menuda caga... :5]
Título: Re: Funcionamiento anomalo con variables
Publicado por: jmiguel en 20 de Enero de 2010, 12:23:58
He cambiado a la version Pro de HiTech y sin problemas :-/