Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

31/03/2010 #1


Liado con el main
hola estoy el en la creacion de un proyecto de transmition de datos por RF, en cual consta de 2 dispositivos como minimo, o un dispositivo y un PC, cada uno de los dispositivos contienen un pic18f4550 una LCD 4x20, un modulo de 2 vias RF, 1 decodificador y un codificador, 7 pulsadores, un parlante para emitir los beep's, un vibrador de celular nokia, entre otras cosas, pero apesar de que llevo adelantado el proyecto y ya tiene el 75% de su sistema operativo, me estoy liando con 2 problemas, llevo mucho tiempo intentando solucionar los problemas, pero no le hallo solucion, quisiera saber si alguien pudiera ayudar.
1er Problema:
Mas o menos digamos que el problema es el siguiente, cuando inicio
int a;
void prog1();// declaro que la funciones seran utilizadas.
void prog2();
void main()//inicio mi main
{
while(true)//pregunto hasta que se cumpla alguno
{
if(a==1){prog1();}//asumamos que a dio 1 a=1; entra al programa 1
if(a==2){prog2();}
}
}

y luego mis funciones
void prog1()//entra al prog1();
{
printf("Mi programa 1");//ejecuta el programa y listo, hasta aqui todo bien
while(true)
{
if(a==1){volver_al_main();}
//MI PROBLEMA ES QUE NO SE COMO VOLVER AL MAIN();
//YA HE PROBADO CON BREAk EL CUAL ME CONGELA EL PROGRAMA Y NO HACE MAS NADA, ME TOCA RESETEAR EL PIC
//TAMBIEN HE USADO EL RETURN PERO TAMPOCO Y LE INSERTO MAIN(); y me dice que recursion no permitted
//asi que queria saber si alguien por casulidad sabe como lograrlo, muchas, gracias.
}
}
mi otro problema todavia lo estoy investigando.
#INT_LOWVOLT
setup_low_volt_detect( LVD_TRIGGER_BELOW | LVD_36 );
31/03/2010 #2

Avatar de cosmefulanito04

Respuesta: Liado con el main
Para el 1er caso, usa un return o en caso de ser void como en tu ej., simplemente al finalizar la subrutina, el codigo vuelve al lugar donde fue llamado, ej:

Código:
void main{
...
..
pepito();
...
}

void pepito()
{
...
if(condicion)
  {
  .... //Hago algo
  }
...//Hago algo o nada y me voy
}

Otra opcion seria:


void pepito()
{
...
if(condicion)
  {
  .... //Hago algo
  return; // Salgo de la subrutina
  }
...//Hago algo o nada y me voy
}

Otra opcion, simplemente devolver algo, para saber que paso en la subrutina:

char pepito()
{
...
if(condicion)
  {
  .... //Hago algo
  return 0; // Salgo de la subrutina
  }
...//Hago algo o nada y me voy
return 1;
}
Lo 2do, no entiendo que queres hacer.
01/04/2010 #3


Respuesta: Liado con el main
Lo de 'volver al main' sólo se hace si única y exclusivamente tienes un bucle infinito en el main, y no en las subrutinas. Lo que te pasa, es que las subrutinas nunca salen del bucle, así que una vez que entras en ellas, ya no sales.

Ésto es algo que sólo se puede hacer con sistemas operativos, donde cada tarea tiene su bucle infinito, y este es el main de dicha tarea. Pero esto es harina de otro costal, e implica el uso de sistemas de gestión de tareas (es decir de algoritmos del propio sistema operativo).
03/04/2010 #4


Respuesta: Liado con el main
humm! entiendo, ya corregi mi problema, para no tener que volver al main a ejecutar mi prog, solo uso el main una vez y luego navego o ejecuto las subrutinas. si mejor muchas gracias por su ayuda!! en horabuena! mille grazie...
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.