Autor Tema: Salir de una función que se este ejecutando en "segundo plano".  (Leído 3315 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado hortoedro

  • PIC10
  • *
  • Mensajes: 19
Re: Salir de una función que se este ejecutando en "segundo plano".
« Respuesta #15 en: 17 de Abril de 2015, 07:39:09 »
No es que no te funcione, es que por ejemplo mientras tu micro esta en un bucle while, no esta haciendo otra cosa.

un ejemplo: Si creas una temporización en tu sistema, solo una, por ejemplo un timer que de una interrupcion cada 1 ms, y en ese timer vas incrementando flag., y en tu bucle while:

while1(1)

{
     if(flag1=="tiempo que quieres que se ejecute la funcion1")
     {
            funcion1();
     }
     if(flag2=="tiempo que quieres que se ejecute la funcion2")
     {
            funcion2();
     }
}

De esta manera solo ejecutara las funciones si tienen que ejecutarse, si no, pasara a la siguiente.

por ejemplo si la funcion1 incrementa segundos entrara 1 vez cada 1000 veces del timer.

si la funcion2 incrementa minutos entrara 1 vez cada 60000 veces del timer.

así tu micro estará "ejecutando varias tareas" al mismo tiempo y nunca se quedara parado en una función, no tendrás que salir de una función a mano, para ejecutar otra, cada una se ejecuta cuando le toca.
pero no pongas while dentro de las funciones por que si no estarías en las mismas. y no te preocupes por el tiempo el micro es muy muy rápido

OK compañero, gracias. Creo que no me he explicado bien, si que tengo posibilidad de salir de la función pero para de ejecutarse, lo que yo quiero es "salir" y que siga ejecutándose. Es decir, entrar en la función y que mientras se vaya ejecutando poder navegar por el menú principal buscando otros datos,por ejemplo.

Un saludo

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: Salir de una función que se este ejecutando en "segundo plano".
« Respuesta #16 en: 17 de Abril de 2015, 07:53:16 »
Si implementas el programa como te he puesto, no tienes que preocuparte por eso, es decir, tu micro estará constantemente cambiado de la función 1 a la 2, por ejemplo.

imagina que la función que quieres que este todo el rato funcionando sea una que esta pendiente a si un pin se pone en alto, y mientras quieres leer un teclado y que se actualice el display.

pues de esta forma primero mirara el pin, despues el teclado y despues el display, pero al no tener while ni delay ni retardos ni nada de eso, lo hará tan rápido que puedes considerar que se esta haciendo todo al mismo tiempo.

no te preocupes por eso, el micro, en el tiempo que tu pulsas un teclado por ejemplo, ha entrado  y salido de la otra función miles de veces.

ten en cuenta que un microcontrolador de un nucleo nunca podrá llevar 2 tareas al mismo tiempo, pero de esta forma se puede considerar que si por su alta velocidad. tiene algunos perifericos que trabajan por si solos pero es por que no dependen del nucleo principal.
« Última modificación: 17 de Abril de 2015, 07:56:29 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Salir de una función que se este ejecutando en "segundo plano".
« Respuesta #17 en: 17 de Abril de 2015, 07:56:28 »
Para hortoedro:
Entonces deberias de re pensar las cosas. Por que estas "encerrando" a tu programa en esa funcion.

Si fuera mi programa  realmente necesitas de una base de tiempos ( por ejemplo segundos ) entonces en la interrupcion pregunto si esta entre los valores que deben ser y ahi enciendo u apago la salida. Y salgo de la interrupcion.
Si quisiera desabilitarlo entonces lo encierro en un if. Y dejo ejecutando para siempre el menu como mi programa principal.

Desconectado hortoedro

  • PIC10
  • *
  • Mensajes: 19
Re: Salir de una función que se este ejecutando en "segundo plano".
« Respuesta #18 en: 17 de Abril de 2015, 08:40:19 »
OK compañeros, muchas gracias. Voy a probar lo que me comentáis. Un saludo