Autor Tema: RTOS para PIC GNU  (Leído 70950 veces)

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

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: RTOS para PIC GNU
« Respuesta #60 en: 06 de Febrero de 2007, 08:20:15 »
Es como un flag o evento de disparo, de la misma manera que los flags de interrupciones, pero con posibilidad de acumulamiento de eventos y hasta envio de mensajes entre tareas.
Una tarea puede pedir la ejecucion de cierto proceso a otra (o a un periferico) y debe quedarse esperando al "semaforo" que utiliza el otro proceso como indicador de resolucion de tarea.
De esta manera dicha tarea se "duerme" hasta que se active el semaforo por parte del otro proceso o se venza el tiempo (si es que se puso timeout).
« Última modificación: 06 de Febrero de 2007, 08:21:51 por Darukur »
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5470
    • Electrónica Didacta
Re: RTOS para PIC GNU
« Respuesta #61 en: 07 de Febrero de 2007, 12:12:20 »
una sugerencia sería explicar/agrupar los conceptos basicos asociados al RTOS. por ejemplo:

Scheduler??
Yield??
semáforos??
task??
poll??
message??

Hola, yo probe los ejemplos del CCS los compilé y simulé en PROTEUS y funcionaron bien. Los probé tb con el PIC16F877 y todo bien. Si mal no recuerdo el RTOS le aumentaba cerca de 800 palabras de programa al codigo.
Saludos
Podras subir los ejemplos que simulaste y que version de CCS tienes??
A mi no me anduvieron en la simulacion... :? :? :? :?

en el adjunto está un ejemplo montado en proteus, usa un 18F452 y el virtual terminal, se puede seguir la simulación paso a paso usando el .cof

pero se allí no paso  :?
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Nichita

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 86
Re: RTOS para PIC GNU
« Respuesta #62 en: 07 de Febrero de 2007, 20:43:11 »
Hola MGLSOFT, yo utilizo la version 3.245 y en cuanto a la simulacion el circuito no es mas que el PIC con los leds conectados en los pines segun esta definido en el codigo o con un LCD segun sea el ejemplo.

Bueno algunas definiciones muy generales:
Scheduler (Planificador): Es la parte del RTOS que se encarga de decidir que tareas va ejecutar el MICRO de acuerdo a como esté implementado éste, si es cooperativo, apropiativo u opera en esquema round robbin, por prioridades, etc.

Task (Tarea): Cuando se hace uso de RTOS, el programa se lo divide en pequeñas secciones de codigo llamadas taks que realizan todas las funciones del sistema, es decir,  encender un led, enviar datos el LCD, leer el puerto X, etc.

Yield: Es una función del sistema operativo que devuelve el control del micro al planificador de manera incondicional.

Espero les sirva,
Saludos

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: RTOS para PIC GNU
« Respuesta #63 en: 08 de Febrero de 2007, 08:07:54 »
Si, ya lo baje al ejemplo y curiosamente anda aqui.. :shock: :shock: :shock: :shock: :shock:
Lo otro curioso es que compile el ejemplo de CCS y tambien anda!! :? :? :?
Pero a mi no me anduvo, asi que vere que hice mal!!! :mrgreen: :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: RTOS para PIC GNU
« Respuesta #64 en: 08 de Febrero de 2007, 12:09:16 »
Les comento las caracteristicas del Sistema Operativo que desarrolle (LMOS):

Sistema operativo:
-Cooperativo.
-Sin uso de stack*
-Manejo de multiples eventos con timeouts
-Manejo de retardos
-Manejo de prioridades:
   Ejecuta la tarea activa de mas alta prioridad, a tareas con la misma prioridad realiza Round Robin.
   32 niveles, 0=La mas alta prioridad
-Contabilizacion de uso de CPU por tarea.
-Soporta PIC24, PIC18 y PIC16 a traves de configuracion

Llamadas al OS:

LMOS_INIT()         Inicializa el sistema operativo

LMOS_SCHEDULER()     Manejador de tareas, se ubica en el prog ppal en un superloop luego de las inicializaciones.

LMOS_GET_TICKS()     En el caso de estar activado LMOS_DEF_ENABLE_SYS_TICK entrega el tick actual del sistema

LMOS_TIMER()              Llamada al tick del sistema, se ubica en la interrupcion de reloj.

LMOS_CREATE_TASK()     Crea la tarea en tiempo de ejecucion y la pone en estado "elegible"

LMOS_DESTROY()         Destruye la tarea actual y retorna al scheluder

LMOS_DESTROY_TASK()   Destruye la tarea indicada

LMOS_STOP()            Detiene la tarea actual y retorna al scheluder

LMOS_YIELD()            Genera un context switch en la tarea de donde se lo llamo y retorna al scheluder

LMOS_GET_TASK_STATE() Entrega el estado actual de la tarea solicitada

LMOS_CHANGE_PRIO()   Cambia la prioridad de la tarea actual

LMOS_CHANGE_TASK_PRIO()  Cambia la prioridad de la tarea seleccionada

LMOS_DELAY()         Genera la demora seleccionada y genera un context switch en la tarea de donde se             lo llamo y retorna al scheluder.

LMOS_INIT_SEMAPHORE()      Inicializa el semaforo seleccionado

LMOS_SIGNAL_SEM()      Activa el semaforo seleccionado

LMOS_WAIT_SEM()         Espera al semaforo seleccionado por un periodo seleccionado (0=por siempre) y genera un context switch en la tarea de donde se lo llamo y retorna al scheluder.

LMOS_TIMED_OUT()      Consulta al OS si el semaforo elegido por la tarea fue activado.

LMOS_CPU_USAGE()      Entrega el porcentaje usado de micro por la tarea seleccionada en el momento con una actualizacion dependiente de LMOS_DEF_N_CPU_TOT_TICK

LMOS_CPU_USAGE_CURRENT() Entrega el porcentaje usado de micro por la tarea actual en el momento con una actualizacion dependiente de LMOS_DEF_N_CPU_TOT_TICK

LMOS_CPU_USAGE_SCHED()      Entrega el porcentaje usado de micro por el Scheduler en el momento con una actualizacion dependiente de LMOS_DEF_N_CPU_TOT_TICK

LMOS_GET_TASK_TICK()          Entrega cantidad de ticks al momento, haciendo la diferencia entre tomas de dicha funcion se sabe el tiempo de proceso por cada contexto

En mi pagina (que esta re verde)  :mrgreen: voy a subir el codigo mas actualizado.

Saludos






El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: RTOS para PIC GNU
« Respuesta #65 en: 08 de Febrero de 2007, 16:13:08 »
Les comento que he estado viendo las funciones que ofrece el LMOS y me parece que está fortísimo ese RTOS, que nace gracias a un amigo del foro. En el hilo que estoy llevando sobre RTOS  (Sistemas Operativos en PICSistemas Operativos en PIC) estamos utilizando el de CCS.

Sin embargo creo que la oferta de Darukur es muy interesante y productiva por muchas razones, simplemente no lo estoy utilizando porque ese RTOS está en fase de desarrollo y como el de CCS es más simple es muy bueno para comenzar a dar los primeros pasos. Así que después de CCS, me muevo para los RTOS GNU como el del amigo Darukur.

En la medida en que vaya poniendo los documentos del curso iré haciendo una comparación del RTOS de CCS con respecto a LMOS, para que vean que interesante está LMOS. Lástima que no sea un SO de tiempo compartido, pero creo que eso se puede mejorar en el futuro.

Saludos Reinier


Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: RTOS para PIC GNU
« Respuesta #66 en: 08 de Febrero de 2007, 16:28:24 »
Darukur:
realmente es un trabajo muy interesante el tuyo!!
Has logrado interesarme en el tema!!

Gracias y adelante con el tema!!, yo poco puedo aportar pero ire aprendiendo de la mano de los ahora aportan. :mrgreen: :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: RTOS para PIC GNU
« Respuesta #67 en: 09 de Febrero de 2007, 14:09:50 »
Lástima que no sea un SO de tiempo compartido, pero creo que eso se puede mejorar en el futuro.

No creo que lo haga preemptivo al LMOS ya que sino no seria para todos los PICS y compiladores (no se puede hacer manejo de stack por soft).
Mas que nada que dejaria de ser "Light" (L ight M icrocontroller O perating S ystem)  :mrgreen:
La idea de este RTOS es que tenga todas las funcionalidades basicas sin que se engorde en codigo, RAM o en latencia para el codigo de usuario.

Para esas necesidades hay RTOS muy buenos como el uCOS-II, el CMX y el FreeRTOS.

Despues habria que armar ejemplos simples para usar el LMOS.

El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: RTOS para PIC GNU
« Respuesta #68 en: 09 de Febrero de 2007, 14:19:29 »
Darukur, dices que es compatible con PIC16, PIC18 y PIC24. ¿No es compatible también con dsPIC30 y dsPIC33 o es que no has podido probarlo?

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: RTOS para PIC GNU
« Respuesta #69 en: 09 de Febrero de 2007, 15:09:11 »
Darukur, dices que es compatible con PIC16, PIC18 y PIC24. ¿No es compatible también con dsPIC30 y dsPIC33 o es que no has podido probarlo?
La compatibilidad es por compilador, PICC PICC18 de Hitech y C30 de Microchip lo probe.
Si funciona para DSPIC.
EL asunto sobre C30 es que no funca el nivel 3 de optimizacion (hasta "s" funciona bien), intente un directiva de assembler pura (para q pegue todo el codigo) pero no le doy a la tecla con el ASM para C30.

Código: [Seleccionar]
#define LMOS_YIELD(LY_TASK_NAME) asm volatile(    "MOV _"  #LY_TASK_NAME ", W0 \n" \
"MOV W0, _TCP_GLOBAL \n" \
"RETURN   \n" \
"_" #LY_TASK_NAME ":" )



no me entiende el label dinamico "LY_TASK_NAME"

En definitiva: usalo tranquilo en PIC16 y 18 y en PIC24/DSPIC tene en cuenta no usar el ultimo nivel de optimizacion (el 3) ya que no hace lo debido (se ahorra codigo el sonzo)  :D

Salute
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: RTOS para PIC GNU
« Respuesta #70 en: 09 de Febrero de 2007, 16:03:02 »
Ya comprendí tu idea Darukur, es cierto lo que dices sobre la lectura de la pila, aunque tengo entendido que en los PIC 18 si puede leerse la pila aunque no se tiene control sobre ella (nada de PUSH o POP).

El no poder leer la pila es una de las razones que impide hacer un  RTOS de tiempo compartido para PIC16, ya que al no poder leer la pila no puede hacerse el cambio de contexto entre tareas, de eso ya hablaré un poco en el cursillo sobre RTOS.

Saludos reiniertl.
Ahora me voy a poner a escribir la próxima entrega.

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: RTOS para PIC GNU
« Respuesta #71 en: 09 de Febrero de 2007, 18:27:18 »
Darukur, vas como una tromba. Que apacionante es el mundo de los sistemas operativos lástima que no pueda dar una mano, el laburo me mata con el horario. Eso de levantarme a las 6 de la matina y volver a las 19hs no es para mí.

Felicidades Marce y dale para adelante, espero tener internet y una PC lo más rápido posible para participar.

Saludos gente, realmente extraño el foro.

Martín
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: RTOS para PIC GNU
« Respuesta #72 en: 20 de Febrero de 2007, 12:00:49 »
Gente que no decaiga!
Cuando pueda pondre algun ejemplo paso a paso de utilizacion del RTOS LMOS.
Estamos viendo con reiniertl de realizar una documentacion amigable y ejemplos.

Saludos

Como siempre sus consultas son bien aceptadas.
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: RTOS para PIC GNU
« Respuesta #73 en: 20 de Febrero de 2007, 12:55:07 »
Aquí estoy apoyando a Darukur con su LMOS, vamos a ver si ponemos un buen material a disposición de todos y además Darukur ya está valorando la posibilidad de migrar el código de su LMOS para el compilador CCS, y adiós al RTOS de CCS, que no es una maravilla.

Ahora, este material nos va a tomar algún tiempo hacerlo, porque tenemos pensado poner ejemplos prácticos y desarrollar algunas funciones específicas para RTOS.

Para los ejemplos tal vez lo lógico es que tomemos algunos proyectos desarollados en el foro y los llevemos a RTOS. En cuanto a las funciones la idea es hacer algunas funciones estándard de E/S alternativas a otras, como por ejemplo las de CCS que trabajan, casi todas por encuesta: printf(), getch(), entre otras. Así que también habrá trabajo para ustedes, ya que todo no podemos hacerlo Darukur y yo solitos.

La convocatoria está abierta

Saludos Reinier

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: RTOS para PIC GNU
« Respuesta #74 en: 20 de Febrero de 2007, 13:24:31 »
Será un placer colaborar en lo que mi escaso tiempo y conocimientos me permitan.