![redhot :5]](http://www.todopic.com.ar/foros/Smileys/default/redhot.gif)
Hola compañeros, venia utilizando sin sobresaltos el BASCOM como compilador, hasta pense que ya no tenia los problemas o bugs que tenia con los compiladores de la familia microchip. Si bien, los primeros proyectos con esta plataforma fueron exitosos (es decir no encontre cosas locas y todo salio mas o menos como esperaba), en el ultimo proyecto al incluir el uso de LCD. Pasaron las siguienes curiosidades
1-El codigo misteriosamente se incremento repentinamente desde solo un par de lineas al 20% de los 8K de un mega88, esto fue tras impesar a usar funciones de LCD (los textos los tengo en la eeprom no como parte de la memoria principal y ademas fue al principio e instantaneo)
2-Conforme fui utilizando mas cosas, el codigo parecia estancarse no aumentaba el % de uso aunque codificaba decenas de lineas de codigo.
3-Empezaron a fallar primero las Funciones al asignar un valor a devolver, tarde lei que solo se podia asignar como ultimo accion dentre de la funcion, crei alegremente que era un error mio, pero aun mudando todo a este tipo de asignacion, ISIS aleatoriamente me avisaba que la asignacion del valor la mandaba a una posicion de memoria fuera de rango.
4-Decidi no usar mas este tipo de devoluciones de valores, aunque ayudaban mucho a una programacion mas entendible y logica. Use variables globales, como deberia ser, pero salvaguardando que cada funcion use privadas si eran criticas asi no hay problemas de cambios por interrupcion ni nada. Pero luego empezaron a fallar las asignaciones BYREF, siempre pasaban bien y empece a notar que aleatoriamente la variable byref no se creaba adecuadamente sino en lucaciones 700h o 720h lo cual indicaba que no se pasaba el puntero adecuadamente y entonces el valor BYREF se perdia y no se lo podia operar.
4-Decidi desistir nuevamente despues de muchas pruebas, proteccion post DIM, etc. Y luego y muy en el final empezaron a fallar algunas BYVAL muchisimo mas esporadicamente pero criticamente (ya que eran llamadas desde una Interrupcion, cuya forma y constitucion la saque de un proyecto anterior que hacia algo similar con el TIMER1 entonces, nunca habia tenido problemas.
5-Naturalmente me dispuse a apagar interrupciones por todos lados, el ADC, a revisar la asignacion de IO, etc. Sin ningun resultado concluyente.
Si a alguien le paso algo similar o encontro el Ki de la cuestion, estaria bueno compartirlo. Por otro lado la funcion para leer un rotary encoder... tambien ME CAN-SO, no siempre la lee adecuadamente (depende de la velocidad de ejecucion del desplazamiento y Mhz del micro) asi que tuve que hacer la mia propia. Y finalmente mi % de memoria utilizado quedo en 48 y casi no se movio de alli aun cambiando, agregando o eliminando cosas, lo cual tambien me parece muuy extraño.
Saludos y charlamos.