Hola a todos.
Estoy realizando un proyecto: un temporizador para una válvula que puede configurarse como N/A o N/C, operación manual o automática, y el control automático puede ser a ciclo continuo o en un número determinado de ciclos, a un máximo y un mínimo de tiempo programable, crea un historial de operación del dispositivo y, en caso de falla de energía, manda a condición segura la válvula y poderse iniciar automáticamente en caso de restablecerse el servicio. Todo esto con el buen PIC16F876A.
Hasta el momento, a estirones y golpes con el Datasheet y el Manual de Referencia de los PIC's de Medio Rango he logrado sacar adelante el proyecto. Pero me topé con un pequeño problemita:
Puedo realizar bien el paginado del programa, manejar PCLATH y la llamada de rutinas de una página a otra sin ningún problema, es más, he puesto 3 tablas para manejar mensajes en caso de que las EEPROM del historial lleguen a fallar (1 tabla por cada una de las páginas en las que he trabajado por el momento, aun no toco la 4a página del programa del pic, son como 4914 lineas de código).
El problema viene aquí: En uno de los menús necesito acceder a otro submenú y en ese sub menú a otro submenú, y en este, a su vez, realizar la selección de dos opciones.
Por lo que logré entender (con mi ingles mordisqueado y con ayuda de San Google traslator) en el Manual de Referencia del PIC (en la página 100) me establece que...
"No puedo realizar más de 8 llamadas anidadas, pues el stack sufre un sobre flujo (es un buffer circular)"
En otras palabras:
No puedo realizar más de 8 llamadas, una dentro de otra, dentro de otra, dentro de otra... etc. porque si no, la novena llamada realizada se ingresara en la primera posición del STACK y eso me provocaría la perdida de la dirección del PC de la primer llamada que yo realice.
Mi consulta es esta: Estoy en lo cierto??? De no ser así, tengo un problema para entender las cosas y mi ingles no me sirve de mucho. De ser cierto, sugiero, humildemente, que lo pongan dentro del tutorial, pues, al menos a mí, que estoy haciendo este proyecto completamente en Assembler, me hubiese sido de mucha ayuda, pues estuve 2 días batallando con ese problemita.
El "overflow" y "underflow" del STACK causan problemas en el ciclo continuo del programa, entonces, al menos en los PIC's de Rango Medio, no se deben de sobrepasar mas de 8 llamadas, incluido el servicio de interrupciones (sin finalizar con su debido RETURN, RETLW o RETFIE ) para asegurar un correcto funcionamiento del STACK.