TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: juansi en 06 de Mayo de 2009, 17:42:30

Título: salir de funciones y bucles
Publicado por: juansi en 06 de Mayo de 2009, 17:42:30
hola amigos, tengo un problema con un programa q me va a volver loco, mi problema es:

¿como puedo salir de un bucle infinito q esta dentro de una funcion "x" para volver a la funcion main?
 ¿y como puedo volver a una funcion anterior a la funcion x?

gracias de ante mano
Título: Re: salir de funciones y bucles
Publicado por: QIQE en 06 de Mayo de 2009, 17:44:38
poniendo una condición mas en el bucle, la cual cambias desde dentro de él y asi sales
Título: Re: salir de funciones y bucles
Publicado por: BrunoF en 06 de Mayo de 2009, 17:50:49
Para salir inmediatamente de un bucle, como un while() o un for() utiliza "break". Para salir de una subrutina utiliza "return". Si la subrutina devuelve un valor, deberías realizar el "return" con el valor adecuado.

Saludos.
Título: Re: salir de funciones y bucles
Publicado por: micro_cadaver en 14 de Mayo de 2009, 17:53:58
BIFURCACIONES DE CONTROL BREAK
Esta instrucción nos permite salir de cualquier bucle ya sea WHILE , DO WHILE, FOR. Cuando el programa encuentra a esat instrucción simplemente salta a la siguiente instruccion fuera del bucle donde se hallaba contenido.

Ejm:
   for(a=0;a<=200;a++)
   {
      Delay1KTCYx(200);
      if (PORTA==0X05)
         break;
      LATB=~LATB;
   }

En esta situación, tenemos un bucle FOR que contara hasta 200 con la variable " a " para satisfacer la expresión del bucle, sin embargo existe un break el cual depende de la estructura condicional IF que inidica si PORTA is igual a 5 entonces ejecuta break, de lo contrario finaliza el IF y continua con el bucle. Cuando PORTA sea igual a 5 el programa se topara con el BREAK y como consecuencia terminara con el bucle FOR y continuará con la siguiente instrucción fuera del bucle.


BIFURCACIONES DE CONTROL CONTINUE
Digamos que dentro de nuestro bucle existe una instrucción al final del bloque de codigo que queremos saltarla o no ejecutarla dependiendo de alguna condición extra, la instruccion CONTINUE permite saltar todas las instrucciones posteriores a su aparición dentro del bloque de codigo escrito en el bucle.

Ejm:
   for(b=0;b<=200;b++)
   {
      Delay1KTCYx(200);
      if (PORTA==0X0A)
         continue;
      LATC=~LATC;
   }

En este caso, el bucle FOR contara hasta 200 con la variable " b " y ejecutará la ultima instruccion LATC=~LATC dependiendo del estado del PORTA, siempre y cuando sea igual a 0X0A, de esta manera se utiliza el CONTINUE.

mas informacion aqui (http://www.todopic.com.ar/foros/index.php?topic=17017.msg115528#msg115528)
Título: Re: salir de funciones y bucles
Publicado por: LalitoX en 15 de Mayo de 2009, 09:51:30
Igual no esta de mas decir que entre los programadores usar break es considerado "trampa" generalmente, siempre se puede modificar la condición o hacer lo que dice qiqe y evitar el uso de break.
Título: Re: salir de funciones y bucles
Publicado por: RedPic en 15 de Mayo de 2009, 10:03:12
Un ejemplo de lo que dice QUIQE:

Estos dos bucles son similares. Cuando PORTA vale 0x05 el bucle termina.   :mrgreen:

Código: C#
  1. for(a=0;a<=200;a++)
  2.         {
  3.            Delay1KTCYx(200);
  4.            if (PORTA==0X05)
  5.               break;
  6.            LATB=~LATB;
  7.         }

y

Código: C#
  1. for(a=0;a<=200,PORTA!=0X05;a++)
  2.         {
  3.            Delay1KTCYx(200);
  4.            LATB=~LATB;
  5.         }


Cuando ponemos dos o mas condiciones de salida, separados por comas, en el bucle éste termina cuando cualquiera de dichas condiciones deja de cumplirse.