TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: yipi en 19 de Julio de 2010, 21:47:33
-
Hola a todos, estoy intentando hacer un programita en c para el 16f88, como compilador uso el CC5X compiler en su version gratuita y lo que pasa es que cuando compilo me da un error indicandome que hay un problema con la pila y por lo que entiendo del mensaje de error (esta en ingles) es que se desborda la pila (la pila del 16f88 tiene 8 niveles), y por lo tanto el programa fallara. Hasta aqui el problema.
Mi duda es la siguiente. Programando en ensamblador los saltos y las llamadas a subrutinas las controlas tu y sabes cuando vas a desbordar la pila, pero cuando escribes en c no sabes los saltos o llamadas que va a crear el compilador, por lo tanto ¿como controlas al escribir el codigo en c para que despues el programa creado por el compilador no desborde la pila?
Gracias.
-
Hola
Normalmente en C y PICs los saltos a subfunciones se traducen a CALLs, por lo que si tienes varias funciones anidadas tendrás una advertencia por desbordamiento de pila.
También debes considerar que las atenciones a interrupciones son como CALLs.
Algunos compiladores insertan muchos CALLs cuando pueden solucionarlo con GOTOs u otras técnicas. Si el compilador que usas es reciente entonces es probable que esto esté pasando.
Te recomiendo HiTech Lite que soporta al PIC16F88 y es un muy buen compilador gratuito.
-
La verdad es que he estado haciendo cuentas y puede ser que si que se desborde ya que dentro de una funcion de las que usas siempre sin darte cuenta ya hay llamadas a otras funciones que estan a lo mejor en librerias etc...
De todas maneras que compilador usais vosotros normalmente a la hora de programar los pics y como solucionais problemas como el que me acaba de surgir a mi porque al fin y al cabo a veces no te queda mas remedio que anidar funciones y no sabes lo que va a hacer el compilador despues.
Por supuesto lo mas eficiente es programar en ensamblador aunque no creo que sea lo que hace la mayoria de la gente no?