Closed AguHDz closed 6 years ago
La reutilización de variables locales, es un tema pendiente aún en PicPas. La implementación eficiente no es sencilla, proque requeire analizar el árbol de llamadas, entre procedimientos. Inicialmente pensé en que las variables globales en ensamblador aparezcan como
Como está ahora, lo cierto es que se entiende muy bien el código ensamblador generado y ponerle a las variables locales el nombre
La versión 0.8.2 utiliza un algoritmo mejorado para optimización de variables locales. Así que ahora se reduce el consumo de RAM. El nombre que se usa sigue siendo el mismo nombre de la variabel local en Pascal y eso puede dar lugar a confusión. El problema del nombre de la variable en el ensamblador es otro tema y esta ligado a obtener información de bancos al momento de desensamblar, algo que es un poco complicado, porque PicPas hace el desensamblado se hace desde el código binario, ya que el compilador no genera ASM, sino binario directamente.
PicPas tiene un problema con el uso de memoria RAM cuando se amplean muchas variables globales. De hecho en este momento es más interesante usar variables globales para enviar datos a las funciones.
Creo que solucionar este problema de manera general no será sencillo, o habrá que solucionarlo usando variables auxiliares reutilizables, pero creo que sería sencillo que si distintas funciones usan un mismo nombre de variables de entrada y del mismo tipo, las pudieran reutilizar.
Por ejemplo, tengo estas cinco funciones:
Se compila:
Ya que hay variables locales que se llaman igual y son del mismo tipo, tal vez resultara sencillo que PicPas lo compilara como:
Aunque el problema vendría en caso de llamadas entre funciones compartan algún nombre de variable de entrada que sea también del mismo tipo. En ese caso si que sería necesario crear alguna variable auxiliar antes de llamadas entre esas funciones (o de momento, advertir claramente en la documentación de PicPas que dos funciones que se llamen entre si, no pueden tener los mismos nombres de variables locales de entrada, o que el propio compilador lo detecte, advierta y avise de error).
Cuando se empiezan ha hacer librerías un poco complicadas, las variables locales se comen literalmente la memoria RAM del microcontrolador, por lo que hay que acabar usando el método del lenguaje ensamblador de crear variables de intercambio globales y llamar a las funciones como si fueran procedimientos.