BOARD uC OLIMEX SAM7-EX256

by

=FreeRTOS= El sistema operativo FreeRTOS es un sistema operativo de tiempo real creado bajo un modelo de simplicidad que permite su implementación sobre una amplia gama de procesadores. Actualmente el FreeRTOS está portado para 31 arquitecturas y provee servicios básicos para el trabajo de tiempo real.

=Portando el sistema operativo a la tarjeta Olimex Sam7-EX256=

=Port para Keil uVision=

Si tiene dudas de como crear proyectos sobre Keil para microcontroladores ARM haga uso del manual descrito en STM32F4 Discovery y ARM:Keil Entrono de desarrollo y depuración

En general los sistemas operativos para sistemas embebidos se deben de adecuar al procesador, compilador y tarjeta de desarrollo/aplicación sobre la cual se desee compilar e implementar. A este proceso se le conoce como el proceso de portado del sistema operativo, este proceso generalmente requiere de amplio conocimiento de la arquitectura el compilador y las herramientas sobre las cuales se estén desarrollando. Dado que todos los sistemas operativos muestran estructuras de archivos diferentes es importante identificar cuales son los archivos que el programador puede llegar a utilizar para variar su configuración. A esta colección de archivos se le conoce como la parte portable del SO. En el caso de FreeRTOS se tiene la siguiente estructura de archivos.

├── Projects                                     //Carpeta principal de los proyectos │   └── TwoTasks_Blink │      ├── AT91SAM7S64_inc.h         //Definiciones del procesador │      ├── AT91SAM7X256_inc.h       //Definiciones del procesador │      ├── Board.h                             //Definiciones de la board │      ├── build │      │   ├──                                     //Archivos temporales de creación del proyecto │      ├── FreeRTOSConfig.h │       ├── lib_AT91SAM7S64.h │       ├── lib_AT91SAM7X256.h │       ├── lst │      │   └──                                     //Archivos temporales de creación del proyecto │      ├── main.c                               //Rutina principal del proyecto, reserva de recursos y funciones de inicialización │      ├──                                          //Mas archivos del proyecto, generalmente archivos de proyecto del entorno de desarrollo │      ├── SAM7.s                              //Rutinas de inicialización del micrcontrolador. Usualmente archivo de arranque desarrollado en ASM │      ├──  │       └──  └── Source ├──                                             //Fuentes del RTOS ├── portable                               //Archivos portables │   ├── Keil                                 //Compiladores soportados en el port │   │   └── SAM7                         //Porcesadores soportados en el port │   │      ├── ISR_Support.inc │   │      ├── portasm.s    │   │       ├── port.c    │   │       ├── portISR.c    │   │       └── portmacro.h    │   └──                                         //Fuentes del RTOS └──                                             //Fuentes del RTOS

Esta estructura de archivos se encuentra contenidos en el siguiente proyecto base

= Programa de ejemplo Blinking BackLight y control de audio por PWM/Software =

Esta sección hace referencia a la explicación de la aplicación de referencia y incluida en el proyecto rtosdemo.uvproj de la carpeta TwoTasks_Blink.

Preámbulo
El interés del desarrollo de las aplicaciones con RTOS es la posibilidades de ejecutar múltiples tareas cumpliendo unas metas de tiempo. Dichas metas de tiempo o deadlines son las que determinan que la aplicación no solo sea una aplicación funcional sino una aplicación en tiempo real, por otra parte es tarea del sistema operativo administrar los recursos del sistema. Para esto se debe crear métodos por los cuales el sistema operativo inicie correctamente los recursos disponibles en HW en el caso del RTOS de estudio se debe declarar, definir y llamar desde el main la función. Es responsabilidad de cada programador conocer su HW para poder iniciarlo de manera correcta, en el caso de FreeRTOS el SO no tiene servicios para monitorear el correcto estado de los recursos de HW.

Funciones y tareas
En el desarrollo de aplicaciones con FreeRTOS el sistema operativo arranca después que el HW ha sido configurado. Por esto el control del CPU es responsabilidad completa del desarrollador cuando se ejecuta la función main luego de la etapa de bootstrap o arranque del microcontrolador.

Función main
En esta función se desarrolla en tres etapas, la primera es la etapa de inicialización de componentes HW (prvSetupHardware), creación de los recursos de SW del RTOS, para el caso de estudio son: Tareas, Colas, Semáforos y mutex y por último el arranque del RTOS dado por el siguiente servicio del RTOS

En general los SO no cesan su operación a menos que el se requiera parar el HW para apagarlo de manera segura
 * Iniciando el Scheduler


 * Creando Tareas

El concepto de tareas en FreeRTOS se maneja desde del punto de vista de métodos o funciones en memoria que pueden ser creadas y destruidas de manera dinámica. Es decir la ejecución de una tarea se realiza por medio de una función previamente definida y declarada. El sistema operativo tiene la capacidad de tomar esta función y a partir de ella crear una o múltiples tareas. El servicio para crear una tarea se muestra en el siguiente segmento de código, este servicio tiene el prototipo:

El valor de retorno es pdPASS si el servició pudo crear la tarea, sino los códigos de error se pueden consultar en el archivo projdef.h en el caso del port implementado hace referencia a

Este servicio tiene como argumentos de entrada: pvTaskCode:   El puntero de entrada de la función, es decir la dirección de la memoria del programa donde se encuentra la función a ejecutar por la tarea. pcName:         Un identificador (String) para identificación en la depuración del programa. usStackDepth: Es el tamaño máximo reservado para el stack de la tarea. pvParameters: Es un puntero usado para pasar la referencia de los argumentos de entrada a la tarea. Estos argumentos pueden ser desde un simple valor a una estructura completa de datos. uxPriority      : Es la prioridad con la que ejecuta la tarea, esta prioridad generalmente se define como una constante y no se modifica dentro de la ejecución de un proyecto. Esto simplifica los cálculos de tiempos de ejecución. pvCreatedTask: Es el manejador de la tarea creada o el puntero a la estructura de control de la tarea.

Estructura sugerida para el archivo main.c
La estrucura de un proyecto con FreeRTOS está generalmente dictada por:


 * Inclusión de librerías del sistema operativo


 * Inclusión de librerías de la tarjeta


 * Inclusión de librerías de la aplicación


 * Declaración de las variables globales de la aplicación


 * Declaración de los prototipos de las tareas y/o funciones a utilizar.


 * Entrada del programa principal


 * Definición de las tareas y/o funciones

Esta estructura puede variar dependiendo del tamaño de la aplicación y el nivel de modularización.

=Recursos y lecturas=

[ http://www.freertos.org/ Pagina del proyecto FreeRTOS] [ http://www.freertos.org/a00106.html API de FreeRTOS]

=Port para GCC y herramientas libres=

SAM7-EX256:FreeRTOS Eclipse