Optimizar llamado de funciones en C
| #1 Optimizar llamado de funciones en C |
| #2 |
|
leo_programer
|
que mas power?
considero que la respuesta a tu pregunta esta en lo siguiente, muy de seguro que el compilador toma la funcion como "inline", eso para el primer caso, de ser asi, el compilador intenta escribir todas las funciones dentro del ciclo while() al momento de compilar el programa, por lo que muy seguro, a parte de definirlas, las reescribe dentro del codigo principal, luego, para el segundo caso, como existe un condicional, muy seguramente el compilador considera que no es una funcion inline, es decir, que al momento de usar las funciones, no las reescribe todas dentro del ciclo while() si no que por el contrario, las llama donde estan guardadas, y por ende no gasta mas memoria... creo que por ahi va la respuesta del por que... o al menos es lo mejor que se me ocurre, si a alguien se le ocurre otra idea que la comente aqui y de paso aprendemos... por ahora, mi consejo es el siguiente, antes de definir la funcion, escribe #separate, aunque eso puede provocar una perdida de memoria en el stack, y mas bien entonces es por eso que se queda sin memoria... pues el stack de los pic por lo general es de hasta 8 de profundida si mal no estoy, o algo asi, es decir, aguanta 8 llamadas a un call en asembler anidados y regresa como si nada, en todo caso, lo mas probable es que sirva, leete un poco el manual del compilador y nos comentas, a ver que conclusion podemos sacar de alli, cuidate... |
|||||||||||
|
|
||||||||||||
| #3 |
|
Power
|
Hola Leo, muchas gracias por responder.Estuve leyendo el manual y tenes razon, El compilador cuando la funcion no tiene la directiva #INLINE decide cuando es mejor implentarla como inline con el objeto de aumentar la velocidad y reservar espacio en el STACK que como bien dices tiene 8 posiciones. Segun el manual hay que tener cuidado al usar la direcitiva #SEPARATE, ya que esta implenta la funcion en forma separada ahorrando ROM pero no tiene en cuenta si se sobrepasa el octavo nivel del stack con la consiguiente perdida del contador de programa.
Saludos |
|||||||||||
|
|
||||||||||||
|
| Temas de interés | |
|---|---|
| Cuenta revoluciones | |
| temporizador de cuenta atras | |
| Cuenta descendente horas, minutos y segundos. | |
| cuenta revoluciones de leds | |
| Diseño de cuenta vueltas | |
| Foros de Electronica |
| ||
Cuestiones Elementales de Electrónica ||
Fuentes de alimentacion ||
Circuitos de radio ||
Diseño de circuitos en general || || Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión || || Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos || |
Site Map
© Foros de Electrónica
Comunidad Internacional de Electrónicos
Powered by phpBB © 2001, 2005 phpBB Group
Acerca de || Política de privacidad
Generada en = 0.13272 segundos, Consultas = 13
© Foros de Electrónica
Comunidad Internacional de Electrónicos
Powered by phpBB © 2001, 2005 phpBB Group
Acerca de || Política de privacidad
Generada en = 0.13272 segundos, Consultas = 13

