TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: osposto en 24 de Abril de 2012, 11:22:59

Título: Secuencia de progrma (es medio filosófico el tema)
Publicado por: osposto en 24 de Abril de 2012, 11:22:59
Estimados:
Espero no sea un tema repetido ya en el foro. No encontré ninguna referencia al mismo, pero puedo estar equivocado. De todos modos ahí va:
Que es preferible (en la programación de un micro con C): Un programa principal que en modo standard esté funcionando y que cuando se produce un llamado, entre a la subrutina, o un programa que en condiciones normales ingrese a la subrutina y sólo cuando se cumplen las condiciones necesarias, se ejecuta el programa completo?
A medida que iba escribiendo las líneas anteriores, me resultaba cada vez más obvia la respuesta, pero ahora ya no tanto. Ejemplo: un simple contador hacia atrás o timer. Es decir, partiendo de un numero de segundos definido, llegar a cero y realizar alguna acción, no importa cuál sea. Hacemos que el programa principal sea el contador, y la interrupción llamada por algun evento (externo o interno), o hacemos que el evento dispare el inicio de la cuenta atrás, y el programa sea el estado 0 (en espera) del timer?
No es muy clara la pregunta, y da pra seguir escribiendo, pero bueno, si me hice entender, me gustaría charlar un poco sobre esto.
Saludos.

Orlando
Título: Re: Secuencia de progrma (es medio filosófico el tema)
Publicado por: Diego E. en 24 de Abril de 2012, 12:03:01
Hola Orlando, pues la forma de programar es algo demasiado personal, todos estructuramos los programas muy diferentes, por ejemplo esta es la forma como yo estructuro la rutina general de mis programas, esto es una forma simulando multitarea, el programa gira en torno a entradas de señales como teclas sensores, etc, además incorporo bases de tiempo que se actualizan todo el tiempo

Saludos.

Código: [Seleccionar]
//*****************************************************************************
//*****************************************************************************
#int_rda //Vector de interrupcion de la recepcion de datos
void interrupcion_rx() //por el usart
{
dato_recibido[0] = getc(RS232); //Se lee el dato recibido
}
///////////////////////////////////////////////////////////////////////////////
#int_timer1 //Vector de interrupcion por desbordamiento del timer 1
void interrupcion_tmr1()
{
delay_cycles(4);
set_timer1(3042);
ban_05seg = 1; //bandera que se activa cada 0,5 seg
con_1seg++;
if(con_1seg == 2) {ban_1seg = 1; con_1seg = 0;}
}
///////////////////////////////////////////////////////////////////////////////
////////////////////////Rutina general
while(true)
{
delay_ms(150);
restart_wdt();

tecla_encendido();
tecla_confi();
tecla_cero();
tecla_incre();
tecla_decre();
tecla_enter();

/////////////////////////////////////////
/////////////////////////////////////////
//eventos que se realizan cada 0,5 seg
if(ban_05seg)
{
ban_05seg = 0;
conversion();
conver_temperatura();
acti_buzzer();
}
/////////////////////////////////////////
//eventos que se realizan cada 1 seg
if(ban_1seg)
{
ban_1seg = 0;
decrementar_tempo();
salir_menu();
comparar_hora();
}
}
Título: Re: Secuencia de progrma (es medio filosófico el tema)
Publicado por: MichaelKnight en 25 de Abril de 2012, 13:05:34
Acabas de tocar un tema de gran complejidad.

Lo "correcto" en programacion es crear diferentes funciones para los distintos procesos que queramos hacer y luego llamarlos desde el principal o incluso desde otras funciones. El motivo es no solo por estilo sino tambien por depuracion, ya que aislando las funciones te es mas facil subsanar y localizar errores. Ahora bien, si lo haces asi en un pic te puedes comer la ROM facilmente, pues aumentas las lineas de codigo. Me ha pasado que por estructurar de modo "ideal" todo el codigo llegaba a ocupar mas del 70%, pero al ir reduciendo funciones e ir metiendolas en el propio main llegue a reducir la ocupacion de la ROM  hasta el 40%.

Como veras, en este caso no se puede responder de manera unica para todos los casos. Como conclusion final, te dire que yo trato siempre de estructurar el codigo mientras que me sea posible. En caso contrario, no me queda otro remedio que saltarme esa metodologia y amontono todo.

Saludos.
Título: Re: Secuencia de progrma (es medio filosófico el tema)
Publicado por: osposto en 13 de Mayo de 2014, 13:42:50
Estimados Diego E y MichaelKnight:

Gracias por su respuesta. En claro me queda el axioma principal de la programación estructurada. y una vez que esté funcionando, tratar de meter las funciones dentro del código, para reducir el espacio en ROM. Creo que sería una buena alternativa... un compromiso entre GWBasic y C++  :tongue:
Gracias nuevamente.