¿Cuál es el número máximo de funciones anidadas en PIC16F628A?

2

¿Cuál es el número máximo de funciones anidadas en PIC16F628A ?
ej. [NUEVO CÓDIGO, debería ser más explicativo]

int main(){
    function1();
}

void function1(){
    function2();
}

void function2(){
    function3();
}

void function3(){
    function4();
}
// And so on 
void functionX-1(){
    functionX();
}

ej. [CÓDIGO ANTIGUO, no tan claro para la pregunta]

int main(){
     function1(); //PIC goes in function 1         
      function2(); //Function 2 is inside function1, PIC goes in function 2
       function3(); //Function 3 is inside function2,  PIC goes in function 3
                    //...
         functionX(); //Function X is inside functionX-1 
                      //^^^PIC goes in function X where it ends executing the code 
                    //a lot of } here
    }

¿ main () cuenta como función?
En la hoja de datos dice pila de hardware profunda de 8 niveles . ¿Eso significa que X = 8? Si no, entonces X =?

    
pregunta Triak

1 respuesta

7

La hoja de datos dice que tienes una pila de hardware profunda de 8 niveles.

Eso significa que puedes empujar los registros en la pila no más de 8 veces antes de que el más antiguo caiga al final.

Suponiendo que main () se llame como una función (que depende de cómo se escribe crt0 para su compilador), que toma una ranura, que le deja con 7 ranuras. No es que, en circunstancias normales, realmente te importe si esa finaliza o no, ya que no deberías regresar de main ().

Una ranura debe estar reservada para interrupciones, para que obtenga 6 ranuras.

No olvides que las funciones de la biblioteca, como tan (), sprintf (), atoi (), etc., también son todas funciones, por lo que usar algo así usará una ranura. Eso deja 5 ranuras.

Siempre existe la posibilidad de que una función de biblioteca pueda llamar a otra función, así que guarda al menos una para eso, lo que deja 4 espacios disponibles.

Entonces, realmente no quieres estar anidando más de 3 o 4 niveles para estar seguro. Así que mantén tu programa agradable y plano y estarás bien.

Hacer que las funciones de utilidad más pequeñas "en línea" disminuyan el uso de tu pila (y el compilador puede hacer eso automáticamente por ti a veces), pero aumentará tu uso de flash.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas