Advertencia de posible desbordamiento de pila (stack overflow) al usar interrupciones en PIC16F876A
Posted: Sun Jul 06, 2025 6:01 am
Estoy desarrollando un proyecto en Flowcode v10 para un microcontrolador PIC16F876A. El proyecto incluye un sensor de temperatura (termistor), visualización por LCD I2C (LCM1602), y una rutina de temporización basada en interrupciones.
Al compilar, recibo la siguiente advertencia del compilador XC8 (v2.10):
(1393) possible hardware stack overflow detected; estimated stack depth: 9
Entiendo que el PIC16F876A solo soporta 8 niveles de stack por hardware, por lo que esta advertencia es relevante.
El comportamiento es el siguiente:
Si elimino tres interrupciones (o las macros asociadas), la advertencia desaparece.
Si mantengo la lógica principal, pero sin interrupciones, el proyecto compila sin problemas.
Las interrupciones eliminadas contenían lógica relativamente simple, como incrementar un contador y verificar si timer == 305 para incrementar una variable seg_base.
Sin embargo, parece que Flowcode 10 encapsula estas funciones de forma más profunda que Flowcode 9, ya que en Flowcode 9 no recibo la advertencia, aún usando el mismo compilador XC8 v2.10.
Mis preguntas son:
¿Flowcode v10 genera más niveles de función internamente al trabajar con interrupciones?
¿Existe una forma segura de implementar temporización por interrupciones sin exceder los niveles de stack?
¿Hay alguna configuración o práctica recomendada para evitar este tipo de advertencias en microcontroladores con pila limitada?
Agradecería mucho cualquier orientación para mantener el uso de interrupciones sin comprometer la estabilidad ni recibir advertencias críticas.
Al compilar, recibo la siguiente advertencia del compilador XC8 (v2.10):
(1393) possible hardware stack overflow detected; estimated stack depth: 9
Entiendo que el PIC16F876A solo soporta 8 niveles de stack por hardware, por lo que esta advertencia es relevante.
El comportamiento es el siguiente:
Si elimino tres interrupciones (o las macros asociadas), la advertencia desaparece.
Si mantengo la lógica principal, pero sin interrupciones, el proyecto compila sin problemas.
Las interrupciones eliminadas contenían lógica relativamente simple, como incrementar un contador y verificar si timer == 305 para incrementar una variable seg_base.
Sin embargo, parece que Flowcode 10 encapsula estas funciones de forma más profunda que Flowcode 9, ya que en Flowcode 9 no recibo la advertencia, aún usando el mismo compilador XC8 v2.10.
Mis preguntas son:
¿Flowcode v10 genera más niveles de función internamente al trabajar con interrupciones?
¿Existe una forma segura de implementar temporización por interrupciones sin exceder los niveles de stack?
¿Hay alguna configuración o práctica recomendada para evitar este tipo de advertencias en microcontroladores con pila limitada?
Agradecería mucho cualquier orientación para mantener el uso de interrupciones sin comprometer la estabilidad ni recibir advertencias críticas.