Written by  Sebastian Baquero
 
 
 
Objetivos
  •  Introducción a los conceptos de Multitasking, Scheduling y Context Switching.
  •  Ampliación de los conceptos a cerca de el mundo de los sistemas operativos en tiempo real.
  • Descipción de hardware básico compatible con RTOS (Real-Time Operating Systems).
  • Ejecutar un sistema operativo en tiempo real sobre el  soft-core Nios II.
 
FreeRTOS
 
 
 
Existen sistemas operativos que no son muy comunes a los cuales los llamas sistemas operativos de tiempo real  (RTOS), tales como FreeRTOS, uC/OS-II, uC/OS-III, RTLinux, QNX, eCOS, etc.  Estos sistemas operativos a diferencia de los de propósito general (Windows, Linux, iOS y Solaris) se aplican para cosas específicas y también mantienen tiempos específicos para cada apliación, esto garantiza que no exitan retardos entre la ejecución de un tarea y otra.
 
A continuación se mostrará la capa de abstracción de un "Operating Systems". Recuerde que aparte de distribuir los tiempos de ejecución de las aplicaciones también esta encargada de permitir el paso de información desde la aplicación hasta la capa HAL (Hardware Abstract Layer).
 
 
 
Figura 1. Niveles de Abstracción de sistemas de computación electrónica.
 
¿Por qué escoger FreeRTOS?
 
"Es probablemente seguro decir en este punto que FreeRTOS pasan mediante más revisiones de pares que cualquier otro RTOS disponible en el planeta. Se ha usado en varios proyectos - one de los cuales fue un entorno de multiprocesador que usó mas que 64 procesadores y necesitó arrancar por meses seguramente. Los núcleos RTOS se ejecutaron bien. Toma FreeRTOS para un giro" - John Westmoreland.
 
FreeRTOS es una elección libre de riesgo, proporcionando la mejor de todo el mundo. Esta es verdaderamente gratuita y soportada, inlcuso cuando se usa en apliaciones comerciales. El FreeRTOS licencia de codigo abierto no plante ningun riesgo para el software propio. 
 
 
Caracteristicas 
 
  • Otorga una solucion sola e independiente para muchas arquitecturas diferentes y herramientas de desarrollo.
  • Es conocida por ser de confianza. Confianza es segura para actividades emprendidas por los SafeRTOS proyecto hermana.
  • Es rico en características y todavía someterse a desarrollos activos continuos.
  • Tiene una ROM mínima, RAM y sobrecarga de procesos. Típicamente una imagen de núcleo binario RTOS estará en el rango de 6K a 12K bytes.
  • Es muy simple, el núcleo del núcleo RTOS esta contenido en solo 3  archivos C. La mayoría de muchos archivos incluidos en el archivo ".zip" descargado relaciona solamente para las aplicaciones de demostraciones numerosas.
  • Es verdaderamente disponible para usar en aplicaciones comerciales.
  • Viene con una protabilidad, desarrollo de plataforma, o servicio de desarrollo de apliación si se re quiere.
  • Es bien establecida con un largo y creciente base de usuario.
  • Contiene un ejempor de pre-configuración para cada puerto. No necesita descifrar como preparar el proyecto, solo descarguelo y compilelo.
  • Tiene un excelente monitoreo y un foro de soporte activo gratuito.
  • Tiene una garantía de soporte comercial que está disponible si se requiere.
  • Proporciona documentacion amplia.
  • Es muy escalable, simple y fácil para usar.
  • FreeRTOS ofrece un pequeño y fácil alternativa de procesamiento de tiempo real para aplicaciones donde eCOS, Linux embebido e inclusive uCLinux no caben, no son apropiados o no están disponibes.
 
Fundamentos de RTOS
 
  • Kernel
  • Multitasking
  • Single tasking
  • Diferencias entre Multitasking y Concurrency
  • Scheduler
  • Context Switching
  • Tiempo real.
 
 
Todos los anteriores conceptos los puedes encontrar en RTOS Fundamentos.
 
 
¿Qué es un Tiempo Real?
 
Cuano se desea que una tarea sea completada en un momento dado, se habla de una tarea que debe ser ejecutada en tiempo real.
 
Tipos de sistemas de tiempo real:
  • Hard real time
  • Soft real time
Un sistema de tiempo real gestiona los tiempos en un microcontrolador o microprocesador.
 
Características de un sistema operativo de tiempo real:
 
  • Soportal Multi-tareas
  • El planificador soporta tareas con prioridades.
  • Sincroniza el acceso de las tareas a recursos que sean compartidos
  • Soporta comunicación entre tareas 
  • Tiempos predecibles
  • Gestión de interrupciones
 
Figura 2. Tiempo real 
 
Task (Tareas)
 

Para dar solucion a un proyecto Macro usando RTOS, este es subdividido en pequeñas tareas. Estas tareas pueden ser ejecutadas de manera "simultánea" o en secuencia. Las tareas compiten entre si por el acceso al procesador y los recursos como ADC, SCI, I2C, SPI, funciones de software, etc.

 
Figura 3. Tareas
 
 
Scheduler(Planificador)
 
El planificador es quien decide a que tarea se le asigna el procesador para que sea ejecutada.
 El planificado según su secuencia de tareas a ejecutar existe: 
  • Estático 
  • Dinámico. 
 
Respecto a sus métodos de planificación se encuentran:
 
     1. Los de orden de llegada con control de prioridad (FIFO) 
     2. Los de tiempos de ejecución (Time slice - Round robin).
 
Según las políticas de planificación estan:
      
 
     3.  "Non pre-emptive scheduling".
     4. "Pre-emptive scheduling".
 
 
Figura 4. Esquemas de los diferentes métodos de aplicación
 
 
Planificador - FreeRTOS 
 
 
Figura 5. Planificador de tres tareas.
 
Figura 6. Explicación de la ejecución de los tasks en el tiempo.
 
1. Task "1" en ejecución
2. El núcleo suspende el task 1.
3. Se resume o incia el task 2.
4. Mientras el task 2 se este ejecutando, esto bloquea un proceso periférico para su acceso exlcusivo.
5. El núcle suspende el task 2.
6. Se resumen o inicia el task 3.
7. En el task 3 intenta acceder al mismo procesador periférico, encontrando bloqueado la tarea 3 no puede continuar entonces se supende así mismo.
8. Vuele en inicia el task 1.
9. Sigue la ejecución del task 2, esta termina cuando el procesador periférico y desbloquearlo.
10. Continua la ejecución con el task 3, se encuentra que puede ahora acceder al procesador periférico y en este tiempo ejecuta hastas ser suspendido por el núcleo.
 
 
Cambios de contexto - FreeRTOS
 
Figura 7. Task resumidos por las instrucciones del ADD.
 
Implementación - FreeRTOS
 
Figura 8. Implementación del FReeRTOS
1. El RTOS idle task se está ejecutando.
2. El RTOS tick ocurre, y el control de las transferencias al "TickISR".
3. El RTOS "TickISR" hace "vControlTask" listo para correr, y como este tiene una prioridad más alta que el RTOS idle task, cambia el contexto para ese vControlTask.
4. Como el contexto de ejecución es ahora el de vControlTAsk, sacando el ISR regresa al control de VControlTask.
5. Mientras se esté ejecuatando.
 
 
 
Procedimiento 
 
Para realizar la practica de FreeRTOS necesitamos de utilizar la implementación del Nios II. (Utilizar la plantilla Nios II HW).
 
Luego de tener listo nuestro hardware, procedemos a realizar la parte de software, para ello utilizaremos la herramienta "Nios II 15.0 Sotfware Build Tool for Eclipse". Una vez que se abra dicha aplicación, vamos a crear un nuevo archivo dando click en "File>Nios II Application and BSP from Template".
 
 
Seguidamente nos aparecera la siguiente imagen en la cual debemos poner la dirección de la carpeta donde se encuentra el proyecto de Quartus II cuya extension es de ".sopcinfo", además de llamar a este nuevo proyecto como "FreeRTOS_test", en la parte de Templates escogemos la opcion "Hello World" y después le damos click en Finish.
 
 
Figura 9. Menu creación nuevo proyecto.
 
 
Para este proyecto se necesitará que descargue el archivo ".zip" que se encuentra a lo ultimo de la página, extraer el archivo y pegarla en la carpeta "FreeRTOS_test" guardada en su PC especificamente en una carpeta que Eclipse crea llamda "Software" donde se encuentra allí las dos carpetas, al haber terminado el paso anterior procedemos darle clean a la carpeta para que actualice el proyecto y aparezca los nuevos archivos viéndose como se muestra en la siguiente figura.
 
 
Figura 10. Localización de las carpetas incluidas en el proyecto.
 
 
Luego de damos click derecho a la carpeta "FreeRTOS_test" y vamos a propiedades, al realizar esto no aparecerá un recuadro de propiedades en la cual debemos selecionar la opción que dice "Nios II Aplication Path".  En la zona donde dice "Application include directories" como su nombre lo indica vamos a incluir el directorio de las carpetas creadas tal como se muestra en la figura 6.
 
Figura 11. Inclusión del directorio de la aplicación.
 
Cuando hayamos verificado que los archivos que se anexaron al proyecto obtenidos del archivo ".zip" estén dentro del mismo, y que hayamos incluido las dirección de los archivos entonces procedemos a trabajar en el archivo "Hello Wrold", en el cual vamos a realizar nuestro programa y vamos a incluir en este, las siguientes lineas de código.
 
 
 
Figura 12. Inclusiones de librerias y código.
 
Antes de empesar a realizar el programa vamos a configurar una de las librerias de tal manera que podemos utilizar una gran parte de la memoria RAM. Para esto es necesarió ir al proyecto en de Quartus II y abrir la opción de Qsys y abrir el módula de la memoria RAM. Una vez abramos el módulo, nos aparecerá las características del mismo, en el cual debemos centrarnos en el tamaño de la memoria, que en nuestro caso será de "240.000".
l
Figura 13. Visualizar el tamaño de la memoria RAM
 
 
Una vez tengamos el dato de la capacidad máxima de memoria RAM, nos vamos al NIOS II en la carpeta de nuestro archivo se encuentra un File ".h" llamado "FreeRTOSConfig.h", seguidamente nos abrirá la libreria en la cual debemos modificar el tamaño de "configTOTAL_HEAP_SIZE" a un valor menor que el tamaño de la memoria ram para que pueda ser ejecutado el programa, en este caso vamos a utilizar un valor de "40.000".
 
 
Figura 14. Ajuste del tamaño de memoria RAM a utilizar en el FreeRTOS.
 
 
Luego de ya haber incluido las librerías y se halla modificado el tamaño de memoria a utilizar de la memoria RAM, vamos a realizar el siguiente programa.
 
 
 
Figura 15. Asignación de la primera tarea.
 
 
A continuación se ve una imagen en la cual describé que es cada una de la estructura utilizada para nuestro sistema operativo FreeRTOS.
 
Figura 16. Estructura y partes del código.
 
Una vez hayamos hecho el programa, actualizamos la carpeta y generamos el proyecto. Después de esto descargamos el software a la FPGA y se va a ver de la siguiente manera:
 

Vídeo de YouTube

 
Seguidamente vamos a crear una nueva tarea como se muestra en la siguiente imagen.
 
 
Figura 17. Creación "Tarea_LED1".
 
En el siguiente video se observará el funcionamiento del programa anterior.
 

Vídeo de YouTube

 
 
A continuación creamos otra tarea en la cual vamos a utilizar los leds del 2 al 6, que puedes observar en la imagen de abajo y seguido su respectivo funcionamiento.
 
Figura 18. Creacion task "Tarea_LED2_6".

Vídeo de YouTube

 
 
 
Por ultimo vamos a agregar una nueva tarea de tal manera que utilicemos todos nuestros leds, de tal manera que se vean todas las tareas que hemos designado en nuestro FreeRTOS en el video correspondiente.
 
Figura 19. Creación del task "Tarea_LED7".
 
 

Vídeo de YouTube

 
 
Solución
 
 
Referencias