Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




Optimizar llamado de funciones en C


       



#1  Optimizar llamado de funciones en C
Power

Registrado: 25 Jun 2006
Mensajes: 38
citar
Hola, Estoy programando un PIC16F877 con el compilador CCS PCW V3.242 y por ejemplo tengo una funcion como la siguiente por ejemplo:

void funcion_1()
{
......
funcion_2();
funcion_3();
}

void main
{
while (true)
{
funcion_1();
}
}

al compilar me dice que no alcanza la memoria del pic, pero si escribo el codigo de la siguiente forma solo ocupa el 40% de la rom incluyendo todo el resto del codigo de programa

void funcion_1()
{
......
si=1;
}

void main
{
while (true)
{
funcion_1();
if(si) {si=0;funcion_2();funcion_3();}

}
}

alguien sabe que pude ser, en realidad es solo por curiosidad y aprender para tenerlo en cuenta en otras oportunidades,ya que el programa esta funcionando.

Muchas Gracias por su tiempo

Saludos

#2  
leo_programer

Registrado: 01 Ago 2006
Mensajes: 56
Ubicación: Colombia
citar
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

Registrado: 25 Jun 2006
Mensajes: 38
citar
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

 Responder



Google
 


 Temas de interés 
No hay mensajes nuevos Cuenta revoluciones
No hay mensajes nuevos temporizador de cuenta atras
No hay mensajes nuevos Cuenta descendente horas, minutos y segundos.
No hay mensajes nuevos cuenta revoluciones de leds
No hay mensajes nuevos 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 ||