Autor Tema: Sistemas operativos en PIC  (Leído 124777 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: Sistemas operativos en PIC
« Respuesta #15 en: 03 de Febrero de 2007, 12:27:16 »
Dos cositas:

-Un libro excelente para empezar con OS sobre microcontroladores: An embedded software Primer (si lo consiguen avisen nadie lo comparte)

-MSX Significa MicroSoft eXtended, osea que nacio en Microsoft. Igual yo era de la commodore....  :mrgreen:
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: Sistemas operativos en PIC
« Respuesta #16 en: 05 de Febrero de 2007, 13:41:13 »
Ya estuve "cacharreando" el RTOS de CCS y creo que para empezar está bien, sin embargo me fui al link de FreeRTOS y me parece que es mejor opción en muchos sentidos que el RTOS de CCS, entre otras cosas, porque tienes acceso al código fuente y podemos además de utilizar el RTOS, optimizar FreeRTOS para nosotros mismos.

Sin embargo quisiera que alguien me dijera donde consigo una versión del compilador GCC para PIC's, si es que existe. El código de FreeRTOS para PIC's está escrito con GCC, pero no dicen donde se puede obtener. Además mi intención futura con la idea de los SO para PIC's es que utilicemos, siempre que se pueda, software bajo licencias GNU. Las ventajas al respecto no hay que explicarlas pero puedo enumerar algunas: acceso al código fuente, menor o cero costos en licencias y una comunidad colaborando para mejorar constantemente los productos on conocimiento de que se hace y por qué.

Entonces, espero sus respuestas.

Gracias por el interés.

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Sistemas operativos en PIC
« Respuesta #17 en: 05 de Febrero de 2007, 15:01:48 »
¿Qué es un Sistema Operativo?

Según Tanenbaum, una de las personalidades más reconocidas en el mundo académico de los SO, no es fácil dar una definición definitiva de lo que es un SO. El problema consiste en que los SO tienen la característica de comportarse para el usuario (que puede ser una persona cualquiera, un programador, o un programa de computadora), como un tipo con "doble personalidad", veamos esto con más detenimiento.

El SO como máquina extendida
En esta faceta de la personalidad del SO, la característica destacable es simplificar al programador los detalles del funcionamiento de los dispositivos conectados al sistema.

Esta característica se pone también de manifiesto en aplicaciones donde no se usan los SO, un ejemplo típico son las funciones output_x() e input_x() del compilador CCS. Un programador puede utilizar estas funciones sin conocer que para que los datos se pongan en los pines o se lean, hay que cambiar varios registros en el uC. Se dice que estas funciones son una abstracción del proceso de E/S en puerto. Esto es bueno porque ayuda a los programadores a desarrollar soluciones más rápidamente y con menor probabilidad de errores ya que si la función está bien escrita es poco probable que falle.

La función de la máquina extendida es ofrecer al programador una "interfaz" gracias a la cual se utilizan los recursos del sistema, sin tener que profundizar demasiado en los detalles del funcionamiento de sus diferentes componentes. Esta interfaz que el SO ofrece al programador o el usuario, se conoce comúnmente como Llamadas al Sistema o API (Aplication Programmer Interface).

Sin embargo esta visión de los sistemas operativos es poco aplicable a nuestro entorno, en el sentido en que hoy se clasifican a las llamadas al sistema, ya que en nuestro mundo todo es pequeño en cuanto a capacidad y el crear una máquina extendida poderosa consume recursos que usualmente no tendremos. Entonces en este caso la máquina extendida queda limitada a algunas llamadas a funciones del SO y al uso de las librerías que hasta el momento hemos utilizado habitualmente.

El SO como administrador de recursos
En este caso el SO, se comporta como un administrador de nuestros recursos. La ventaja de tener alguien que administre eficientemente los recursos consiste en que el SO ofrezca al usuario un conjunto de reglas para compartir y hacer uso de los recursos disponibles con eficacia y eficiencia.

Un ejemplo de administración de los recursos es el uso de la CPU, en un sistema sin SO, el programador tiene que estar muy pendiente de la implementación de su sistema, porque puede que determinados requisitos temporales en la ejecución de algunas funciones tengan que cumplirse.

En nuestro caso lo usual es que nos rompamos el coco manipulando interrupciones, poniendo demoras, cambiando contadores y chequeando banderas… ¡Uf solo de pensarlo me dan ganas de llorar! Sin embargo un SO puede hacerse cargo de todos esos temas de manera eficaz y eficiente, incluso ahorrando memoria y tiempo, y nosotros los programadores concentrarnos en la implementación de la solución, más que en la gestión eficiente de nuestros recursos.

Por supuesto que el SO no es mago ni adivino, para ello debe ofrecernos un conjunto de mecanismos, relativamente sencillos, que nos ayuden a "indicarle" o "pedirle" que es lo que queremos hacer.

En el caso de los uC, las implementaciones de los SO, se caracterizan por potenciar la administración de recursos del SO, por lo que es esta la faceta de personalidad que más a menudo encontraremos en los RTOS.

Clasificación de los SO.
A continuación veremos como se clasifican los SO en cuanto a dos características esenciales

  • la administración del recurso fundamental: el procesador
  • el destino del SO

Los SO se pueden clasificar de distintas maneras, pero para abreviar lo más posible, solamente me voy a referir a las ya mencionadas.

En cuanto a la administración del procesador existen dos clasificaciones:
  • SO cooperativo (non preemptive): en este caso es el programador quién tiene la responsabilidad de entregarle el procesador al núcleo del SO, para que éste lo entregue a la próxima tarea que esté solicitándolo o programada para ejecutarse. Es entonces, muy importante, que las llamadas a funciones que ejecutemos nunca se queden esperando mucho tiempo por determinados eventos, evitar los lazos infinitos y entregar el procesador cuando no lo necesitemos, para que otra tarea o proceso pueda utilizarlo.
  • SO de tiempo compartido (preemptive):  En este caso el programador debe contar con los mismos mecanismos que en el anterior, pero el SO tiene la facultad de quitarle el procesador y dárselo a otro si usted se ha excedido en su tiempo o hay alguien que tiene mayor prioridad.

En cuanto al destino hay unas cuantas clasificaciones pero me voy a concentrar en los RTOS. Un RTOS (Sistema Operativo de Tiempo Real) es un sistema operativo concebido para dispositivos pequeños como los uC.

Aunque el concepto de "tiempo real" es muy controversial, la idea es ejecutar determinadas tareas de forma que parece que cada tarea se está ejecutando en un sistema independiente, donde el procesador y el resto de los recursos son sólo para ella.

Los RTOS pueden ser utilizados también para computadoras grandes, pero la idea sigue siendo la misma, ejecutar las tareas cumpliendo estrictamente con los requisitos temporales de cada una, sin violaciones de ninguna índole.

Otro caso de SO, son los de propósito general como UNIX, LINUX, Windows, en este caso a diferencia de los RTOS, las tareas cambian de prioridades en función de satisfacer las exigencias de los humanos que actúan como usuarios, no importa si algunas cosas se ejecutan o no cumpliendo tiempos estrictos.

Hasta aquí el comentario de hoy, que ha sido bastante extenso. Todavía no he terminado el esqueleto del "curso". Pero en cuanto lo tenga, lo publico, además voy a mejorar un poco lo que he escrito hasta ahora para publicarlo como documento (PDF).

Y basta ya de muela, que eso cansa (a ustedes y a mis pobres dedos). En la próxima entrega ya tendremos código para ejecutar y ver como funciona un RTOS, comenzaremos con el de CCS y en el futuro veremos si no mudamos para el FreeRTOS o el que desarrolla Darukur, eso lo someteremos a votación en el foro.
« Última modificación: 05 de Febrero de 2007, 15:13:49 por reiniertl »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Sistemas operativos en PIC
« Respuesta #18 en: 05 de Febrero de 2007, 18:21:40 »
excelente amigo reiniertl, voy a veriguar sobre el compilador GCC para PIC's,  la priemra vez q lo leo  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Sistemas operativos en PIC
« Respuesta #19 en: 05 de Febrero de 2007, 19:38:24 »
Citar
Un SO nos puede ayudar a hacer sistemas más estables.

Ya me parecia que Windows no era un SO..... :D
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Sistemas operativos en PIC
« Respuesta #20 en: 06 de Febrero de 2007, 03:09:40 »
Muy interesante este hilo, habrá que seguirlo de cerca.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Sistemas operativos en PIC
« Respuesta #21 en: 06 de Febrero de 2007, 08:40:56 »
Gracias reiniertl por ayudar a sembrar la semilla de la curiosidad por los RTOS y explicar que es y como trabaja un RTOS.

En el otro post de "RTOS para PIC GNU" habia puesto el enlace al manual del SALVO RTOS.

h**p://rapidshare.com/files/12902417/SalvoUserManual.pdf.html

Aca estan los conceptos de un RTOS.
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 micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Sistemas operativos en PIC
« Respuesta #22 en: 06 de Febrero de 2007, 09:28:23 »
exceleente info, hoy me sumergo con todos los datos!!!  :mrgreen:
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Sistemas operativos en PIC
« Respuesta #23 en: 07 de Febrero de 2007, 13:16:07 »
Hola amigos, heme aquí de nuevo con ustedes. Disculpen que no haya posteado más pero es que he estado ocupado. Ahora el contenido del curso lo pueden encontrar también en Microfactory un blog que he creado para publicar información sobre el diseño de sistemas con microcontroladores. Espero que lo visiten y me dejen sus opiniones.

Hoy mismo espero poner el contenido del próximo tema: Hola mundo con RTOS

He estado revisando la redacción del contenido para publicarla en el Blog, de forma que esté disponible para más gente y que tenga mejor calidad, como la idea es que sea una especie de curso, creo que así está un poco mejor que los mensajes que posteo en el foro.

No se asusten que yo voy a seguir posteando aquí, y en dependencia de como van las cosas, mejoro un poco el contenido y entonces para el Blog.

Bueno, hasta dentro de un rato.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Sistemas operativos en PIC
« Respuesta #24 en: 07 de Febrero de 2007, 13:29:18 »
okas amigo !!!  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: Sistemas operativos en PIC
« Respuesta #25 en: 07 de Febrero de 2007, 15:30:23 »
visite la direccion y vaya es muy interesante esta comensando .todos ayudemos un poco de teria no le hace mal a nadie...........pues todo esto comenso con teorias que a veces tildaban de fantasticas, de ciencia ficcion, de un loco universitario frustrado :shock: :shock:
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Sistemas operativos en PIC
« Respuesta #26 en: 07 de Febrero de 2007, 16:45:04 »
Hola mundo con RTOS
Después de teorizar un poco sobre los Sistemas Operativos, vamos a introducirnos en la programación de aplicaciones empleando un RTOS.

En nuestro caso, para comenzar, utilizaremos el RTOS que viene con el compilador de CCS. Las razones de mi elección las expongo a continuación:
  • Sencillez en la implementación de aplicaciones
  • El RTOS está integrado en el propio compilador de CCS
  • Abundante experiencia en el foro con este compilador
  • Gran cantidad de dispositivos soportados por el compilador de CCS

Introducción al RTOS de CCS
La versión del compilador que tengo instalada en estos momentos es la 3.249, así que si en versiones posteriores han aparecido nuevas características, les ruego que lo informen para tomar las debidas providencias en el momento oportuno, y comenzar a utilizar esas nuevas características.

El RTOS de CCS es un Sistema Operativo de Tiempo Real que implementa la técnica de multiprocesamiento cooperativo (non preemptive), por lo que es responsabilidad del programador asegurarse de que el control del procesador retorna al planificador de tareas en algún momento. Así que cuando programemos nuestra aplicación, tenemos que asegurarnos de que no llamamos a una función que se queda esperando por algún evento largo como es el caso de gets(), o dentro de un lazo infinito o demasiado extenso.

Planificador de tareas
Uno de los elementos fundamentales de cualquier SO es el planificador de tareas, éste señor es el administrador de nuestros recursos. Su misión fundamental es determinar dentro de las tareas que están listas para ejecutarse, a cuál de ellas le entrega el procesador. La política de planificación empleada por CCS no la conozco, pero eso no importa porque el RTOS funciona y para lo que queremos hacer, nos sirve bien.

Directivas del preprocesador
Existen dos directivas del preprocesador para el uso del RTOS, ellas son:
  • #USE RTOS: Se utiliza para indicarle al compilador que se va a utilizar el RTOS
  • #TASK: Se utiliza para indicarle al compilador se la función definida a continuación es una tarea a ejecutar por el RTOS


Vamos a ver más detenidamente cada una de las directivas, así como sus parámetros de configuración:
#USE RTOS
Opciones del RTOS:
timer: especifica que temporizador, de los disponibles, es el que se utilizará para la ejecución de las tareas. Este temporizador solamente debe ser utilizado por el RTOS y típicamente se escoge Timer0
minor_cycle: especifica la cantidad de tiempo mínima que una tarea tendrá para ejecutarse, y los tiempos de ejecución de cada tarea deben ser múltiplos de esta cantidad. Si por ejemplo decimos que el tiempo mínimo de ejecución para todas las tareas es de 1ms, debemos conocer que cada tarea se ejecutará, en menos tiempo que este. Lo realmente importante de este dato es que ayuda a establecer la frecuencia con que se ejecutan las tareas, luego veremos un ejemplo de esto. Este parámetro, si no se especifica, es calculado por el compliador en el momento de la compilación.
statistics: le indica al compilador que lleve las estadísticas de las tareas, esto sirve para  conocer que tiempo consume cada tarea en ejecutarse, sin embargo como veremos más adelante, la estadística realmente importante es la que nos indica si nuestra tarea se ha sobrepasado en su tiempo mínimo de ejecución.

#TASK
Opciones para las tareas:
rate: especifica con que frecuencia se ejecuta la tarea, este parámetro debe ser igual a minor_cycle de #use_rtos o un múltiplo de este valor.
max: especifica que cantidad de tiempo debe consumir esta tarea en su ejecución, si se sobrepasa este tiempo y están activadas las estadísticas, entonces esta tarea es marcada con el valor overrun. Este parámetro es útil para informar al programador que una tarea se ha pasado de su tiempo de ejecución, y si el RTOS fuera de tiempo compartido seguramente especificaría el tiempo en que el planificador le retira el procesador para dárselo a otra tarea.
queue: especifica el tamaño de la cola de mensajes de la tarea. Si la tarea no recibe mensajes, entonces debe dejarse en blanco para no consumir memoria RAM innecesariamente.

Hasta aquí hemos visto una pequeña explicación de las directivas para utilizar el RTOS. Sin embargo, la utilidad de esto es mejor verla con un ejemplo.

Funciones del RTOS
EL RTOS de CCS ofrece un conjunto de funciones que veremos cada una en su momento y con sus debidos ejemplos. Sin embargo hoy utilizaremos solamente la función rtos_run(), que le indica al planificador que comience a ejecutar las tareas.

El ejemplo
Se quiere implementar una aplicación en un PIC16F877, donde se utilice el RTOS para transmitir por el puerto serie de este uC, tres cadenas de caracteres. Cada cadena será transmitida desde dentro de una tarea del RTOS y tendrán el formato “Ejecutada tarea #”. Las especificaciones de tiempo del sistema y de cada tarea son las siguientes:

  • Temporizador para el RTOS: Timer0
  • Tiempo mínimo en que debe ejecutarse una tarea: 10ms
  • Frecuencia de ejecución de la Tarea 1: 1seg, tiempo para ejecutar: 10ms
  • Frecuencia de ejecución de la Tarea 2: 2seg, tiempo para ejecutar: 5ms
  • Frecuencia de ejecución de la Tarea 3: 3seg, tiempo para ejecutar: 250us

El código lo pongo a continuación y posteriormente les doy una explicación:
Código: C++
  1. #include "D:\Documentos\Projects\RTOS\RTOS.h"
  2. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
  3. #use RTOS(timer=0, minor_cycle=10ms) //temporizador Timer0, tiempo mínimo de ejecución de cada tarea 10ms
  4. int8 test;
  5.  
  6. //Definición de las prototipos de función de las tareas
  7. #task (rate=1s, max=10ms)  //Ejecutar cada 1 segundo y consumir como máximo 10ms
  8. void Tarea1();
  9.  
  10. #task (rate=2s, max=5ms)  //Ejecutar cada 2 segundos y consumir como máximo 5ms
  11. void Tarea2();
  12.  
  13. #task (rate=3s, max=250us)  //Ejecutar cada 3 segundo y consumir como máximo 250us
  14. void Tarea3();
  15.  
  16. void main()
  17. {
  18.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  19.    rtos_run();  //A partir de aquí comenzará la ejecución de las tareas
  20.  
  21. }
  22.  
  23. //Implementación de las tareas
  24. void Tarea1()
  25. {
  26.   printf("Ejecutada tarea 1\r");
  27. }
  28.  
  29.  
  30. void Tarea2()
  31. {
  32.   printf("Ejecutada tarea 2\r");
  33. }
  34.  
  35. void Tarea3()
  36. {
  37.  printf("Ejecutada tarea 3\r");
  38. }


Este código funciona y si lo simulan con el Proteus comprobarán que las cadenas salen por el puerto serie. Como pueden ver es un ejemplo sencillo pero que muestra el funcionamiento del RTOS. Al ejecutarlo pueden comprobar que primero se ejecuta la Tarea 1, pero después comprobarán que las tareas no se ejecutan en orden secuencial porque la Tarea 2 se ejecutará cada 2 segundos y la Tarea 3 cada 3 segundos.

La no ejecución secuencial de cada tarea se debe al parámetro rate de la directiva #task, que le dice al planificador con que frecuencia ejecutar cada tarea. Este programa puede ser fácilmente modificado para cualquier aplicación específica, un ejemplo que se me ocurre es la lectura de teclados y eliminación de rebotes.
Como tarea les dejo que elaboren un programa sin el uso del RTOS que haga lo mismo que este.
« Última modificación: 09 de Mayo de 2007, 13:19:33 por reiniertl »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Sistemas operativos en PIC
« Respuesta #27 en: 07 de Febrero de 2007, 17:18:53 »
¡Fantástico, clarificador, ejemplar, didáctico!

Gracias por el post, reiniertl.

Además, tu encargo final de realizar la misma aplicación sin RTOS es lo que realmente me ha abierto los ojos de la potencia de los mismos para este tipo de aplicaciones.

Espero con avidez tu próximo post de este cursillo acelerado porque no tienen desperdicio.

Gracias de nuevo.

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Sistemas operativos en PIC
« Respuesta #28 en: 07 de Febrero de 2007, 21:26:25 »
Ya me va quedando mas claro el uso de RTOS. :)
Que la fuerza te acompañe

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5470
    • Electrónica Didacta
Re: Sistemas operativos en PIC
« Respuesta #29 en: 08 de Febrero de 2007, 12:03:49 »
la pregunta que hice en el otro post ha quedado respondida.  8)

Gracias reiniertl

Salu2
Pedro
« Última modificación: 08 de Febrero de 2007, 12:12:15 por PalitroqueZ »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek