SlideShare una empresa de Scribd logo
1 de 49
Desarrollo de drivers
y aplicaciones para FreeRtos

                                   Marzo 2010
                        Ing. Marcelo Lorenzati
            http://sistemasembebidos.com.ar
Agenda
   Sistemas de tiempo Real y Sistemas embebidos
   Introducción a los RTOS embebidos y a FreeRTOS
   Ports, manejo de Memoria y configuración
   Control del Kernel y de la Tarea
   Sincronización y Comunicación entre tareas
   El por qué del Driver
   Partes de un Driver
   Desarrollo de un Driver
   Tipos de Drivers
   Drivers desarrollados
   Ejemplo de uso – audio player con FreeRTOS
   Conclusiones
   Bibliografía
   Preguntas
Sistemas de tiempo Real y Sistemas embebidos /1
            Patriot                           F16




            Sistemas en tiempo real
                      Mars Climate Orbiter

            Sistemas embebidos
                                             Ariane-5



Therac-25   Complejos
            Tuvieron fallas
Sistemas de tiempo Real y Sistemas embebidos /2
  Problemas específicos de los sistemas de tiempo real
  
   Tiempos de respuesta estrictos
  
   Impredictibilidad del comportamiento del entorno
  
   Necesidad de accion rapida ante errores
  Problemas específicos de los sistemas de software
  
   Atomicidad
  
   Estancamiento
  
   Sincronizacion
  
   Concurrencia
  
   Condiciones de carrera
  
   Secciones criticas
  
   Desbordes de memoria
  
   Paralelismo
  
   Tiempos de desarrollo del sistema
  
   Mantenimiento del sistema
  Problema específicos de los sistemas embebidos
  
   Parte integral de un sistema mas grande
  
   Heterogeneidad de dispositivos
  
   Memoria de datos y de programa reducida
  
   Alto acoplamiento del código con el Hardware
  
   Baja potencia de computo
  
   Monoliticos
Introducción a los RTOS embebidos /1
    Variante de un sistema operativo, donde se asegura un resultado
     computacional en un periodo predecible de tiempo.
    RTOS para sistemas embebidos! No sistemas complejos de
     tiempo real *
    Dominio total del algoritmo de scheduling
    Acceso rápido al hardware
    Tiempos reducidos de reaccion (ms vs ns)
    Capacidad de priorización
    Generalmente diseñados para funcionar con memoria reducida y
     baja potencia de computo.
    Suelen ser monolíticos,en una sola imagen binaria se alberga el
     kernel y las aplicaciones
    Drivers simples de una sola capa,lo que los hace mas rápidos
     comparado con kernels que usan drivers multicapa.
Introducción a los RTOS embebidos /2
Espacio de la aplicación


 Tarea 1         Tarea 2            Tarea 3         Tarea 4           Tarea 5




                     Interface de llamada al sistema
  Tareas - Memoria - Comunicación & sincronización - Temporización - I/O Device
Espacio del kernel
       Port              Driver 1             Driver 2            Driver 3



                                  Hardware
Introducción a los RTOS embebidos /3
Otros RTOSes:

RTLinux         PICOS18    ThreadX
uCLinux         UNIX-RTR   EmbOS
LynxOS          µnOS       Windows CE
eCos            Helium     INTEGRITY
Symbian OS      uCOS-III   RTAI
BeRTOS          Vxworks    TRON
FreeOSEK        Salvo      VelOSity
OpenRTOS        QNX        CMX
Introducción a
Especificaciones:

     Micro kernel que provee un sistema operativo en
     tiempo real priorizable, tanto cooperativo,
     “preventivo” o mixto.

     Pensado para microcontroladores , cuenta con
     mas de 23 ports avalados para las diferentes
     arquitecturas y compiladores.

     API totalmente documentada y con ejemplos.

     Escrito en su mayoria en C, es liviano en tamaño
     de codigo y en uso de memoria RAM.

     Ambiente de desarrollo multiplataforma, de
     codigo abierto y de libre uso.
Ports /1

 Un port, es una porcion específica del codigo
del sistema operativo.

 Se lo conoce tambien como Board Support
Package

 Conecta la logica del RTOS con el hardware
especifico del procesador.

 Debe tener en cuenta las especificaciones del
compilador que se usa.

 El diseño de un port de un RTOS no es trivial.
Ports /2
                                                          ID
Tarea 3
                                                       Nombre
Tarea 2
               Cambio de                      Registros del procesador
Tarea 1         contexto
                                                   Pila de memoria
                                                (variables de la tarea)

                                                 Recursos (eventos)
  Especialización de metodos de arranque
  Control del timer de sistema
  Control de la pila de memoria                 Recursos (Señales)
  Control de las zonas criticas
  Control de los registros del procesador              (BCT)
                                             Bloque de control de la tarea
                                                      genérico
Manejo de Memoria



                            Malloc
                                                     ?




                                                 Malloc
             Free




   Parte integral del sistema operativo.
   Usado por el RTOS para la creacion/destruccion de tareas,
    semaforos y colas.
   Soporta multiples modelos:
     Modelo simple (asigna memoria pero no libera)
     Modelo común (asigna y libera pero no ordena)
     Modelo mejorado (reordena)
   Implementacion de FreeRTOS
     Malloc() → pvPortMalloc()
     Free() → pvPortFree()
Configuración
FreeRTOSConfig.h
Modifica en tiempo de compilación el modo de
   ejecucion del RTOS.

     configUSE_PREEMPTION

     configCPU_CLOCK_HZ

     configTICK_RATE_HZ

     configMAX_PRIORITIES

     configMINIMAL_STACK_SIZE

     configTOTAL_HEAP_SIZE

     configMAX_TASK_NAME_LEN

     configUSE_USE_MUTEXES

     configUSE_CO_ROUTINES

     #define INCLUDE_vTaskDelete 1
Control en ejecución del kernel /1
Metodos de distribución del procesador:
 Subdivision en el tiempo
 Basado en eventos
FreeRTOS soporta AMBOS
Algoritmos de administracion de tareas:
 Cooperativo (la tarea relega el procesador)
 Preventivo (el OS administra el procesador)
Priorizacion de tareas:
 FreeRTOS permite controlar el numero de prioridades
 La tarea de mas alta prioridad es la que se ejecuta
 Posibilidad de inversion de prioridades en el modelo cooperativo
 FreeRtos permite prioridades iguales
    Round Robin
Control en ejecucion del kernel /2
Modifican el manejador de tareas del RTOS en
      tiempo de ejecucion.

        taskYIELD()

        taskENTER_CRITICAL()

        taskEXIT_CRITICAL()

        taskDISABLE_INTERRUPTS()

        taskENABLE_INTERRUPTS()

        vTaskStartScheduler()

        vTaskEndScheduler()

        vTaskSuspendAll()

        xTaskResumeAll()
Control de la tarea /1

 Una TAREA es la unidad basica de ejecucion de un RTOS.

 Las tareas se ejecutan con su propio contexto
independiente de cualquier otra instancia, con lo que su
consumo de memoria es alto y su tiempo de ejecucion
considerable.

 Pueden existir multiples instancias de la misma tarea.

 Las co-rutinas comparten el mismo contexto entre
diferentes instancias (consumen una sola pila), son de
ejecucion rapida pero tienen restricciones en cuanto a
donde y como se pueden ejecutar y solo funcionan en modo
cooperativo.

  Si no esta instanciada no ocupa memoria ni tiempo de
procesador
Control de la tarea /2
Es interrumpible por:

      IRQ de Hardware

      Cambio de prioridades

      Cambio de contexto del RTOS

      Cambios de estado forzados desde la tarea

APIs que modifican el flujo de control de la tarea e indirectamente
del kernel:

      XtaskCreate / VtaskDelete

      VtaskDelay / vTaskDelayUntil

      UxTaskPriorityGet / vTaskPrioritySet

      VtaskSuspend / vTaskResume / vTaskResumeFromISR
Control de la tarea /3
Arranque del RTOS y de una Tarea “Demo” y destruccion:
static void vDemo( void *pvParameters )
{
   for ( ; ; )
   {
      vTaskDelay( 1000 );
      vTaskDelete(xHandle);
   }
}

/*Main Program*/
int main( void )
{
   prvSetupHardware();
   xTaskCreate( vDemo, "Demo", STACK_SIZE, NULL, tskIDLE_PRIORITY, xHandle );
   vTaskStartScheduler();
   return 0;
}
Control de la tarea /4
Uso del Stack de Memoria:
static void vDemo( void *pvParameters )   vdemo()
{
   portLONG lData[1000];                  lData[]
   for ( ; ; )
   {
      func_1();
   }
                                          func_1()
}
                                          cData_1[]
void func_1(void)
{
  portCHAR cData_1[1000];                 func_2()
  func_2();
}                                         cData_2[]

void func_2(void)
{
  portCHAR cData_2[1000];
  process();                                    STACK_SIZE
}
Sincronización de la tarea /1
    Una tarea no es util si no interactúa con otros procesos.
    Se requiere que permita sincronizar, proteger y compartir.
    FreeRTOS ofrece Semaforos y Mutex.
    Pueden correr en una tarea o en código de interrupciones.
    Los semaforos permiten la sincronización entre dos tareas,
     siendo una la que espera (Take) y otra que la dispara o
     libera(give)
    Los semaforos pueden ser binarios o contadores.
    Dar incrementa
    Si esta en su maximo no incrementa
    Tomar decrementa
    Si es cero y se lo toma bloquea

    Los Mutex son una especializacion de los semaforos binarios,
     permiten la proteccion para el acceso de un recurso comun
     serializado.
Sincronización de la tarea /2
API's de sincronización:
   VsemaphoreCreateBinary
   VsemaphoreCreateCounting
   XsemaphoreCreateMutex
   XsemaphoreCreateRecursiveMutex
   XsemaphoreTake
   XsemaphoreTakeRecursive
   XsemaphoreGive
   XsemaphoreGiveRecursive
   xSemaphoreGiveFromISR
Sincronización de la tarea /3
Ejemplo de captura de recurso compartido:
   Creación de recurso:
vSemaphoreCreateBinary(sem1);

       Captura y liberación de recurso (2 procesos iguales):
if (xSemaphoreTake(sem1, (portTickType) 1000 ) != pdTRUE)
{
    return ERROR;
}

doProcess();

xSemaphoreGive(sem1);
Sincronización de la tarea /4
Ejemplo de sincronización, productor y consumidor:
Creación de recurso:
VsemaphoreCreateCounting(sem1, 0);

Consumidor:
if (xSemaphoreTake(sem1, (portTickType) portMAX_DELAY ) != pdTRUE)
{
    return ERROR;
}
processData();

Productor:
feedData();
xSemaphoreGive(sem1);
Comunicación entre tareas /1
Provee los medios para compartir datos entre tareas
  aisladas.
 Colas de mensajes:
 Tuberias (Resultado de un proceso es entrada para otro)
      Puede variar el tamaño del mensaje
      Stout / stdin
 Mailbox (Pub / sub)
 Semaforos
 Memoria compartida
                        Bloqueos

             Tarea 1    Memoria      Tarea 2


   A menor nivel de abstraccion mayor probabilidad de errores
   Los recursos del RTOS son caros, usar con criterio.
Comunicación entre tareas /2
Colas de mensajes:
Creacion de una cola:
       xQueue = xQueueHandle xQueueCreate(lenght, size);

Envio de datos por cola:
       xQueueSend(xQueue, itemToQueue, timeOut);

Recepcion de datos por cola:
      xQueueReceive(xQueue, itemToDeQueue, timeOut);
Resumen


      Tarea no instanciada no ocupa tiempo en el
      manejador (scheduler) ni RAM.

      Tarea en demora o en espera de eventos
      (semaforo o cola) no consume tiempo de
      procesador (Idle waiting)

      Evitar busy waiting!!
While ( !done ) { };

      Crear objetos del RTOS consume tiempo y
      memoria, usar con criterio!!!
El por qué del Driver
Abstraen  la logica del dispositivo de la
 funcionalidad genérica.
Permite la reusabilidad del driver en diferentes
 aplicaciones
Permite la independencia de la aplicacion en
 diferentes arquitecturas
Permite sincronizar eventos del hardware con
 eventos del RTOS
Permite considerar al procesamiento del hardware
 como una tarea mas del sistema
Los periféricos son lentos comparados a la CPU
Partes de un Driver /1
                      Entre la tarea y el driver se maneja el “que”
                      •Formado en la mayoria de los casos por los
                      siguientes metodos básicos:
    Tarea 1               • Init() / Reset()
                          • Open()
                          • Close()
                          • Read()
                          • Write()
          Interface   •Metodos persistentes sobre las diferentes
              De      arquitecturas
Driver     llamada
         al sistema   La interfase entre el driver y el hardware
                      maneja el ”como”:
                      •En la mayoria de los casos esta definida por el
                      uso de:
   Hardware              • I/O de hardware
                         • Manejo de las interrupciones
                         • Manejo del DMA
                         • Manejo de la memoria
Partes de un Driver/2

             Capa de Abstracción del hardware (HAL)

             Virtualiza el hardware de la plataforma para
   Driver
             que diferentes drivers puedan ser portados
             facilmente en diferentes hardwares.
    HAL
             Puede ser tan simple como define en un
             archivo de cabeceras (header file) hasta una
  Hardware
             capa completa de código a la cual se
             interfacea.
Desarrollo de un driver
Código en espacio de aplicación:

      Llamadas a la interface del driver (APIs)
  
       Usan el hilo del programa que lo llama

      Previamente instanciado (como un servicio)
  
       Usan su propio hilo

      Pueden ser instanciados y/o removidos del scope del
      kernel

      La mayoria del procesamiento se encuentra aqui
Código en interrupciones:

      Es irremovible, se ubica en tiempo de compilación

      Es simple y corto

      Solo se toman los datos

      KISS (Keep it simple Silly)
Desarrollo de un driver /1

     Puntos importantes:

     Requerimientos para el driver
  
    Tiempo de respuesta
  
    Capacidades de direccionamiento

     Especificaciones del hardware
  
    Encuestado (Polled)
  
    Basado en IRQs
  
    Basado en DMA
  
    Mixtos
Desarrollo de un driver /2
Secciones Criticas:
    Porción de código que debe ser tratada atómicamente
    Una vez entrado en sección critica no se interrumpe
    Generalmente acceden a un recurso de HW
    Deben ser serializables
    Tipos de secciones criticas
             En espacio de aplicación
             En espacio del kernel
             En espacio de interrupciones
    Métodos de protección según severidad
             Baja: Mutex ()
             Media: evitar cambio de contexto
             Alta:
              Evitar cierto tipo de interrupciones

              Evitar interrupciones dentro de interrupciones

             Mas Alta!: Deshabilitar interrupciones globales
Tipos de drivers /1
Interface humana
                           
                             De comunicaciones
 
   Entrada                    
                                Usart
   
     Teclados matriciales     
                                SPI
   
     Pulsadores               
                                I2C
   
     Touch pads               
                                I2S
   
     Mouse                    
                                USB
 
   Salida                   
                             De temporizacion
   
     Pantallas                
                                Timers
     
       LCD de caracteres      
                                Counters
     
       LCD Graficas           
                                PWM / CCP
     
       VGA                  
                             De entrada salida
   
     Sonido                   
                                Controladores de memoria
     
       DACs                   
                                Controladores de puertos
     
       Codecs
Tipos de drivers /2
Sincrónicos

    Tambien llamados bloqueantes.

    Por diseño la tarea que llama al driver esperara el resultado de la
    operación por la cual consulto.

    No significa que otras tareas no puedan ocupar el tiempo del
    procesador.

    Una vez completado se despertara a la tarea en espera y
    consumira su resultado.

    Son mas simples que otro tipo de drivers.

    Suelen utilizarse semáforos binarios para tal fin.

    Se utilizan al menos 2 semáforos:
      
          Uno para garantizar la captura del recurso (mutex)
      
          Otro para informar la conclusion de la tarea.
Tipos de drivers /3
Ejemplo driver sincrónico




    Tarea 1                     Tarea 2
                            T
Tipos de drivers /4
Ejemplo driver sincronico
unsigned portCHAR cSendFrame(pI2sSendData pData)
{
    unsigned portCHAR errCode;
    if (xSemaphoreTake(xMutex, (portTickType) xBlockTime ) != pdTRUE) //Intento tomar mutex
    { return ERR_SEM_TIMEOUT; }
    DoBgProcess(); //Proceso del HW en segundo plano
    if (xSemaphoreTake(xSem, (portTickType) xBlockTime ) == pdTRUE) //Espero que complete
    { errCode = SUCCESS; }
    else { errCode = ERR_TASK_TIMEOUT; }
    xSemaphoreGive(xMutex); //Libero Mutex
    return errCode;
}


void vI2sISR(void)
{
    if (completed)
    {
        takeData();
        xSemaphoreGiveFromISR(xSem, &xN); //Señalo evento de finalización
    }
}
Tipos de drivers /5
Asincrónicos

     Por diseño la tarea que llama al driver puede continuar
     ejecutando sin esperar el resultado de la operación que pidio.

     Oportunidad para avanzar tareas hasta que la operación este
     lista.

     Mucho mas complejos de diseñar y a veces innecesarios

     Mas impredecibles en su comportamiento

     Metodos:
   
      Poll
   
      Señales / Slots
   
      Callback
Tipos de drivers /6
Ejemplo de driver asincrónico (Polled):

                              Driver




     Tarea 1           Cola




                                          IRQ
                                                 Hardware
                                          Soft
Tipos de drivers /7
Ejemplo de driver asincrónico (Callback):


                              Tarea 1
                                 B


        Tarea 1
           A

                                                     T
                                            Driver



        Tarea 1
           B
Drivers desarrollados

Lista de drivers desarrollados para FreeRTOS

  Puerto serie

  SPI

  I2S

  Fat

  LCD gráfico

  Timer
Ejemplo de uso – audio player con FreeRTOS
      Aplicativo reproductor de archivos WAV                         SOC

                                               Servicio
     Chan’s FATFS
                                                RTC

 diskio      Consulta RTC


                                                                FreeRTOS

 SPI Driver                       I2S Driver                 PORT

                                   Hardware

     SPI                               I2S                   TIMER

 SD/MMC                        AUDIO CODEC                Hardware externo
Conclusiones
Los RTOS:
    Consumen mas tiempo de procesador
    Consumen mas memoria
    Reducen la incertidumbre
    Reducen el tiempo de desarrollo
    Mejoran la mantenibilidad
    Mejoran la Abstraccion
    Mejoran la independencia de tareas
    Mejoran la escalabilidad
    Son menos suceptible a errores
    Permiten facilemente la priorizacion
    Facilitan la portabilidad
Bibliografía

•
     Using the FreeRTOS Real time Kernel, a Practical Guide -
     Richard Barry
•
     http://freertos.org
•
     Architecture of Device I/O Drivers" - David Kalinsky, Ph.D.
•
     Linux Device Drivers, Third Edition - Jonathan Corbet, Alessandro
     Rubini, and Greg Kroah-Hartman
•
     An embedded Software Primer – David E. Simon
•
     http://elm-chan.org/fsw/ff/00index_e.html
•
     http://www.cs.brown.edu/courses/csci1600/handouts/notes/ipc.pdf
•
     http://sistemasembebidos.com.ar/foro
Preguntas
Gracias!
Backup
Placa ARM7TDMI adaptada de
       LQFP64 a PDIP
     (XTAL, USB y JTAG)



                             Ejemplo de uso para medicion
                                  de acelerometros
Demo AudioPlayer




                   Placa casera de desarrollo
Ejemplo Driver de video




                          Ejemplo Generador de ondas
                                    digital
Codigo fuente de los ejemplos

Más contenido relacionado

La actualidad más candente

Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
Bazaar la herramienta para el control de versiones de forma distribuida
Bazaar la herramienta para el control de versiones de forma distribuidaBazaar la herramienta para el control de versiones de forma distribuida
Bazaar la herramienta para el control de versiones de forma distribuidaEsteban Saavedra
 
Diagrama entidad-relacion normalización
Diagrama entidad-relacion normalizaciónDiagrama entidad-relacion normalización
Diagrama entidad-relacion normalizacióncintiap25
 
Analisis de algoritmos complejidad en tiempo y espacio
Analisis de algoritmos complejidad en tiempo y espacioAnalisis de algoritmos complejidad en tiempo y espacio
Analisis de algoritmos complejidad en tiempo y espacioAdamari Cortes
 
Introducción a JUnit
Introducción a JUnitIntroducción a JUnit
Introducción a JUnitIker Canarias
 
Estados y transiciones de los procesos
Estados y transiciones de los procesosEstados y transiciones de los procesos
Estados y transiciones de los procesosAlberto Ch
 
Tema manejo de la entrada
Tema manejo de la entradaTema manejo de la entrada
Tema manejo de la entradaSasil Catzim
 
Input output redirection linux
Input output redirection linuxInput output redirection linux
Input output redirection linuxTanishq Soni
 
Arquitecturas del harvard y von neumann maria
Arquitecturas del harvard y von neumann mariaArquitecturas del harvard y von neumann maria
Arquitecturas del harvard y von neumann mariamariagrau14
 
Comparativa Arquitectura Cliente/Servidor y Distribuida
Comparativa Arquitectura Cliente/Servidor y DistribuidaComparativa Arquitectura Cliente/Servidor y Distribuida
Comparativa Arquitectura Cliente/Servidor y DistribuidaSergio Olivares
 
Linux Kernel Module - For NLKB
Linux Kernel Module - For NLKBLinux Kernel Module - For NLKB
Linux Kernel Module - For NLKBshimosawa
 
Portafolio Lenguajes y Autómatas Unidad 1
Portafolio Lenguajes y Autómatas Unidad 1Portafolio Lenguajes y Autómatas Unidad 1
Portafolio Lenguajes y Autómatas Unidad 1Humano Terricola
 

La actualidad más candente (20)

Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Latches
LatchesLatches
Latches
 
Bazaar la herramienta para el control de versiones de forma distribuida
Bazaar la herramienta para el control de versiones de forma distribuidaBazaar la herramienta para el control de versiones de forma distribuida
Bazaar la herramienta para el control de versiones de forma distribuida
 
Introduccion fpga
Introduccion fpgaIntroduccion fpga
Introduccion fpga
 
Diagrama entidad-relacion normalización
Diagrama entidad-relacion normalizaciónDiagrama entidad-relacion normalización
Diagrama entidad-relacion normalización
 
Analisis de algoritmos complejidad en tiempo y espacio
Analisis de algoritmos complejidad en tiempo y espacioAnalisis de algoritmos complejidad en tiempo y espacio
Analisis de algoritmos complejidad en tiempo y espacio
 
Introducción a JUnit
Introducción a JUnitIntroducción a JUnit
Introducción a JUnit
 
Estados y transiciones de los procesos
Estados y transiciones de los procesosEstados y transiciones de los procesos
Estados y transiciones de los procesos
 
Tema manejo de la entrada
Tema manejo de la entradaTema manejo de la entrada
Tema manejo de la entrada
 
Input output redirection linux
Input output redirection linuxInput output redirection linux
Input output redirection linux
 
Contador binario
Contador binarioContador binario
Contador binario
 
Tarjeta madre
Tarjeta madreTarjeta madre
Tarjeta madre
 
Arquitecturas del harvard y von neumann maria
Arquitecturas del harvard y von neumann mariaArquitecturas del harvard y von neumann maria
Arquitecturas del harvard y von neumann maria
 
Comparativa Arquitectura Cliente/Servidor y Distribuida
Comparativa Arquitectura Cliente/Servidor y DistribuidaComparativa Arquitectura Cliente/Servidor y Distribuida
Comparativa Arquitectura Cliente/Servidor y Distribuida
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Tópicos Avanzados de Programación - Unidad 1 GUI
Tópicos Avanzados de Programación - Unidad 1 GUITópicos Avanzados de Programación - Unidad 1 GUI
Tópicos Avanzados de Programación - Unidad 1 GUI
 
Linux Kernel Module - For NLKB
Linux Kernel Module - For NLKBLinux Kernel Module - For NLKB
Linux Kernel Module - For NLKB
 
Portafolio Lenguajes y Autómatas Unidad 1
Portafolio Lenguajes y Autómatas Unidad 1Portafolio Lenguajes y Autómatas Unidad 1
Portafolio Lenguajes y Autómatas Unidad 1
 
Hilos con Posix
Hilos con PosixHilos con Posix
Hilos con Posix
 
Hilo de ejecución
Hilo de ejecuciónHilo de ejecución
Hilo de ejecución
 

Destacado (7)

Diapositiva JDBC
Diapositiva JDBCDiapositiva JDBC
Diapositiva JDBC
 
Controladores presentacion
Controladores presentacionControladores presentacion
Controladores presentacion
 
Variadores de velocidad
Variadores de velocidadVariadores de velocidad
Variadores de velocidad
 
Variadores de velocidad
Variadores de velocidadVariadores de velocidad
Variadores de velocidad
 
Que es un driver
Que es un driverQue es un driver
Que es un driver
 
Variadores frecuencia (presentación)
Variadores frecuencia (presentación)Variadores frecuencia (presentación)
Variadores frecuencia (presentación)
 
Controladores
ControladoresControladores
Controladores
 

Similar a Desarrollo de drivers y aplicaciones para FreeRtos

Similar a Desarrollo de drivers y aplicaciones para FreeRtos (20)

Resumen del primer corte
Resumen del primer corteResumen del primer corte
Resumen del primer corte
 
Arqui hardware
Arqui hardwareArqui hardware
Arqui hardware
 
evolucion de sisitemas operativos
evolucion de sisitemas operativosevolucion de sisitemas operativos
evolucion de sisitemas operativos
 
evolucion de los sistemas operativos
evolucion de los sistemas operativosevolucion de los sistemas operativos
evolucion de los sistemas operativos
 
Sx embebidos
Sx embebidosSx embebidos
Sx embebidos
 
prueba
pruebaprueba
prueba
 
Taller sistemas operativos
Taller sistemas operativosTaller sistemas operativos
Taller sistemas operativos
 
Taller sistemas operativos (27) slatan
Taller sistemas operativos (27) slatanTaller sistemas operativos (27) slatan
Taller sistemas operativos (27) slatan
 
Taller sistemas operativos
Taller sistemas operativosTaller sistemas operativos
Taller sistemas operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Informe sistemas empotrados
Informe   sistemas empotradosInforme   sistemas empotrados
Informe sistemas empotrados
 
Conceptos generales (2)
Conceptos generales (2)Conceptos generales (2)
Conceptos generales (2)
 
Taller no 3
Taller no 3Taller no 3
Taller no 3
 
Los Sistemas Operativos
Los Sistemas OperativosLos Sistemas Operativos
Los Sistemas Operativos
 
Traduccion
TraduccionTraduccion
Traduccion
 
TIPOS DE SOFTWARE
TIPOS DE SOFTWARETIPOS DE SOFTWARE
TIPOS DE SOFTWARE
 
Conseptos BáSicos De Sistemas Operativos
Conseptos BáSicos De Sistemas OperativosConseptos BáSicos De Sistemas Operativos
Conseptos BáSicos De Sistemas Operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
MICROCONTROLADOR
MICROCONTROLADORMICROCONTROLADOR
MICROCONTROLADOR
 
Los sistemas operativos
Los sistemas operativosLos sistemas operativos
Los sistemas operativos
 

Último

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 

Último (19)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 

Desarrollo de drivers y aplicaciones para FreeRtos

  • 1. Desarrollo de drivers y aplicaciones para FreeRtos Marzo 2010 Ing. Marcelo Lorenzati http://sistemasembebidos.com.ar
  • 2. Agenda  Sistemas de tiempo Real y Sistemas embebidos  Introducción a los RTOS embebidos y a FreeRTOS  Ports, manejo de Memoria y configuración  Control del Kernel y de la Tarea  Sincronización y Comunicación entre tareas  El por qué del Driver  Partes de un Driver  Desarrollo de un Driver  Tipos de Drivers  Drivers desarrollados  Ejemplo de uso – audio player con FreeRTOS  Conclusiones  Bibliografía  Preguntas
  • 3. Sistemas de tiempo Real y Sistemas embebidos /1 Patriot F16 Sistemas en tiempo real Mars Climate Orbiter Sistemas embebidos Ariane-5 Therac-25 Complejos Tuvieron fallas
  • 4. Sistemas de tiempo Real y Sistemas embebidos /2 Problemas específicos de los sistemas de tiempo real  Tiempos de respuesta estrictos  Impredictibilidad del comportamiento del entorno  Necesidad de accion rapida ante errores Problemas específicos de los sistemas de software  Atomicidad  Estancamiento  Sincronizacion  Concurrencia  Condiciones de carrera  Secciones criticas  Desbordes de memoria  Paralelismo  Tiempos de desarrollo del sistema  Mantenimiento del sistema Problema específicos de los sistemas embebidos  Parte integral de un sistema mas grande  Heterogeneidad de dispositivos  Memoria de datos y de programa reducida  Alto acoplamiento del código con el Hardware  Baja potencia de computo  Monoliticos
  • 5. Introducción a los RTOS embebidos /1  Variante de un sistema operativo, donde se asegura un resultado computacional en un periodo predecible de tiempo.  RTOS para sistemas embebidos! No sistemas complejos de tiempo real *  Dominio total del algoritmo de scheduling  Acceso rápido al hardware  Tiempos reducidos de reaccion (ms vs ns)  Capacidad de priorización  Generalmente diseñados para funcionar con memoria reducida y baja potencia de computo.  Suelen ser monolíticos,en una sola imagen binaria se alberga el kernel y las aplicaciones  Drivers simples de una sola capa,lo que los hace mas rápidos comparado con kernels que usan drivers multicapa.
  • 6. Introducción a los RTOS embebidos /2 Espacio de la aplicación Tarea 1 Tarea 2 Tarea 3 Tarea 4 Tarea 5 Interface de llamada al sistema Tareas - Memoria - Comunicación & sincronización - Temporización - I/O Device Espacio del kernel Port Driver 1 Driver 2 Driver 3 Hardware
  • 7. Introducción a los RTOS embebidos /3 Otros RTOSes: RTLinux PICOS18 ThreadX uCLinux UNIX-RTR EmbOS LynxOS µnOS Windows CE eCos Helium INTEGRITY Symbian OS uCOS-III RTAI BeRTOS Vxworks TRON FreeOSEK Salvo VelOSity OpenRTOS QNX CMX
  • 8. Introducción a Especificaciones:  Micro kernel que provee un sistema operativo en tiempo real priorizable, tanto cooperativo, “preventivo” o mixto.  Pensado para microcontroladores , cuenta con mas de 23 ports avalados para las diferentes arquitecturas y compiladores.  API totalmente documentada y con ejemplos.  Escrito en su mayoria en C, es liviano en tamaño de codigo y en uso de memoria RAM.  Ambiente de desarrollo multiplataforma, de codigo abierto y de libre uso.
  • 9. Ports /1  Un port, es una porcion específica del codigo del sistema operativo.  Se lo conoce tambien como Board Support Package  Conecta la logica del RTOS con el hardware especifico del procesador.  Debe tener en cuenta las especificaciones del compilador que se usa.  El diseño de un port de un RTOS no es trivial.
  • 10. Ports /2 ID Tarea 3 Nombre Tarea 2 Cambio de Registros del procesador Tarea 1 contexto Pila de memoria (variables de la tarea) Recursos (eventos) Especialización de metodos de arranque Control del timer de sistema Control de la pila de memoria Recursos (Señales) Control de las zonas criticas Control de los registros del procesador (BCT) Bloque de control de la tarea genérico
  • 11. Manejo de Memoria Malloc ? Malloc Free  Parte integral del sistema operativo.  Usado por el RTOS para la creacion/destruccion de tareas, semaforos y colas.  Soporta multiples modelos: Modelo simple (asigna memoria pero no libera) Modelo común (asigna y libera pero no ordena) Modelo mejorado (reordena)  Implementacion de FreeRTOS Malloc() → pvPortMalloc() Free() → pvPortFree()
  • 12. Configuración FreeRTOSConfig.h Modifica en tiempo de compilación el modo de ejecucion del RTOS.  configUSE_PREEMPTION  configCPU_CLOCK_HZ  configTICK_RATE_HZ  configMAX_PRIORITIES  configMINIMAL_STACK_SIZE  configTOTAL_HEAP_SIZE  configMAX_TASK_NAME_LEN  configUSE_USE_MUTEXES  configUSE_CO_ROUTINES  #define INCLUDE_vTaskDelete 1
  • 13. Control en ejecución del kernel /1 Metodos de distribución del procesador:  Subdivision en el tiempo  Basado en eventos FreeRTOS soporta AMBOS Algoritmos de administracion de tareas:  Cooperativo (la tarea relega el procesador)  Preventivo (el OS administra el procesador) Priorizacion de tareas:  FreeRTOS permite controlar el numero de prioridades  La tarea de mas alta prioridad es la que se ejecuta  Posibilidad de inversion de prioridades en el modelo cooperativo  FreeRtos permite prioridades iguales  Round Robin
  • 14. Control en ejecucion del kernel /2 Modifican el manejador de tareas del RTOS en tiempo de ejecucion.  taskYIELD()  taskENTER_CRITICAL()  taskEXIT_CRITICAL()  taskDISABLE_INTERRUPTS()  taskENABLE_INTERRUPTS()  vTaskStartScheduler()  vTaskEndScheduler()  vTaskSuspendAll()  xTaskResumeAll()
  • 15. Control de la tarea /1  Una TAREA es la unidad basica de ejecucion de un RTOS.  Las tareas se ejecutan con su propio contexto independiente de cualquier otra instancia, con lo que su consumo de memoria es alto y su tiempo de ejecucion considerable.  Pueden existir multiples instancias de la misma tarea.  Las co-rutinas comparten el mismo contexto entre diferentes instancias (consumen una sola pila), son de ejecucion rapida pero tienen restricciones en cuanto a donde y como se pueden ejecutar y solo funcionan en modo cooperativo.  Si no esta instanciada no ocupa memoria ni tiempo de procesador
  • 16. Control de la tarea /2 Es interrumpible por:  IRQ de Hardware  Cambio de prioridades  Cambio de contexto del RTOS  Cambios de estado forzados desde la tarea APIs que modifican el flujo de control de la tarea e indirectamente del kernel:  XtaskCreate / VtaskDelete  VtaskDelay / vTaskDelayUntil  UxTaskPriorityGet / vTaskPrioritySet  VtaskSuspend / vTaskResume / vTaskResumeFromISR
  • 17. Control de la tarea /3 Arranque del RTOS y de una Tarea “Demo” y destruccion: static void vDemo( void *pvParameters ) { for ( ; ; ) { vTaskDelay( 1000 ); vTaskDelete(xHandle); } } /*Main Program*/ int main( void ) { prvSetupHardware(); xTaskCreate( vDemo, "Demo", STACK_SIZE, NULL, tskIDLE_PRIORITY, xHandle ); vTaskStartScheduler(); return 0; }
  • 18. Control de la tarea /4 Uso del Stack de Memoria: static void vDemo( void *pvParameters ) vdemo() { portLONG lData[1000]; lData[] for ( ; ; ) { func_1(); } func_1() } cData_1[] void func_1(void) { portCHAR cData_1[1000]; func_2() func_2(); } cData_2[] void func_2(void) { portCHAR cData_2[1000]; process(); STACK_SIZE }
  • 19. Sincronización de la tarea /1  Una tarea no es util si no interactúa con otros procesos.  Se requiere que permita sincronizar, proteger y compartir.  FreeRTOS ofrece Semaforos y Mutex.  Pueden correr en una tarea o en código de interrupciones.  Los semaforos permiten la sincronización entre dos tareas, siendo una la que espera (Take) y otra que la dispara o libera(give)  Los semaforos pueden ser binarios o contadores. Dar incrementa Si esta en su maximo no incrementa Tomar decrementa Si es cero y se lo toma bloquea  Los Mutex son una especializacion de los semaforos binarios, permiten la proteccion para el acceso de un recurso comun serializado.
  • 20. Sincronización de la tarea /2 API's de sincronización:  VsemaphoreCreateBinary  VsemaphoreCreateCounting  XsemaphoreCreateMutex  XsemaphoreCreateRecursiveMutex  XsemaphoreTake  XsemaphoreTakeRecursive  XsemaphoreGive  XsemaphoreGiveRecursive  xSemaphoreGiveFromISR
  • 21. Sincronización de la tarea /3 Ejemplo de captura de recurso compartido:  Creación de recurso: vSemaphoreCreateBinary(sem1);  Captura y liberación de recurso (2 procesos iguales): if (xSemaphoreTake(sem1, (portTickType) 1000 ) != pdTRUE) { return ERROR; } doProcess(); xSemaphoreGive(sem1);
  • 22. Sincronización de la tarea /4 Ejemplo de sincronización, productor y consumidor: Creación de recurso: VsemaphoreCreateCounting(sem1, 0); Consumidor: if (xSemaphoreTake(sem1, (portTickType) portMAX_DELAY ) != pdTRUE) { return ERROR; } processData(); Productor: feedData(); xSemaphoreGive(sem1);
  • 23. Comunicación entre tareas /1 Provee los medios para compartir datos entre tareas aisladas.  Colas de mensajes:  Tuberias (Resultado de un proceso es entrada para otro)  Puede variar el tamaño del mensaje  Stout / stdin  Mailbox (Pub / sub)  Semaforos  Memoria compartida Bloqueos Tarea 1 Memoria Tarea 2  A menor nivel de abstraccion mayor probabilidad de errores  Los recursos del RTOS son caros, usar con criterio.
  • 24. Comunicación entre tareas /2 Colas de mensajes: Creacion de una cola: xQueue = xQueueHandle xQueueCreate(lenght, size); Envio de datos por cola: xQueueSend(xQueue, itemToQueue, timeOut); Recepcion de datos por cola: xQueueReceive(xQueue, itemToDeQueue, timeOut);
  • 25. Resumen  Tarea no instanciada no ocupa tiempo en el manejador (scheduler) ni RAM.  Tarea en demora o en espera de eventos (semaforo o cola) no consume tiempo de procesador (Idle waiting)  Evitar busy waiting!! While ( !done ) { };  Crear objetos del RTOS consume tiempo y memoria, usar con criterio!!!
  • 26. El por qué del Driver Abstraen la logica del dispositivo de la funcionalidad genérica. Permite la reusabilidad del driver en diferentes aplicaciones Permite la independencia de la aplicacion en diferentes arquitecturas Permite sincronizar eventos del hardware con eventos del RTOS Permite considerar al procesamiento del hardware como una tarea mas del sistema Los periféricos son lentos comparados a la CPU
  • 27. Partes de un Driver /1 Entre la tarea y el driver se maneja el “que” •Formado en la mayoria de los casos por los siguientes metodos básicos: Tarea 1 • Init() / Reset() • Open() • Close() • Read() • Write() Interface •Metodos persistentes sobre las diferentes De arquitecturas Driver llamada al sistema La interfase entre el driver y el hardware maneja el ”como”: •En la mayoria de los casos esta definida por el uso de: Hardware • I/O de hardware • Manejo de las interrupciones • Manejo del DMA • Manejo de la memoria
  • 28. Partes de un Driver/2 Capa de Abstracción del hardware (HAL) Virtualiza el hardware de la plataforma para Driver que diferentes drivers puedan ser portados facilmente en diferentes hardwares. HAL Puede ser tan simple como define en un archivo de cabeceras (header file) hasta una Hardware capa completa de código a la cual se interfacea.
  • 29. Desarrollo de un driver Código en espacio de aplicación:  Llamadas a la interface del driver (APIs)  Usan el hilo del programa que lo llama  Previamente instanciado (como un servicio)  Usan su propio hilo  Pueden ser instanciados y/o removidos del scope del kernel  La mayoria del procesamiento se encuentra aqui Código en interrupciones:  Es irremovible, se ubica en tiempo de compilación  Es simple y corto  Solo se toman los datos  KISS (Keep it simple Silly)
  • 30. Desarrollo de un driver /1  Puntos importantes:  Requerimientos para el driver  Tiempo de respuesta  Capacidades de direccionamiento  Especificaciones del hardware  Encuestado (Polled)  Basado en IRQs  Basado en DMA  Mixtos
  • 31. Desarrollo de un driver /2 Secciones Criticas:  Porción de código que debe ser tratada atómicamente  Una vez entrado en sección critica no se interrumpe  Generalmente acceden a un recurso de HW  Deben ser serializables  Tipos de secciones criticas En espacio de aplicación En espacio del kernel En espacio de interrupciones  Métodos de protección según severidad Baja: Mutex () Media: evitar cambio de contexto Alta: Evitar cierto tipo de interrupciones Evitar interrupciones dentro de interrupciones Mas Alta!: Deshabilitar interrupciones globales
  • 32. Tipos de drivers /1 Interface humana   De comunicaciones  Entrada  Usart  Teclados matriciales  SPI  Pulsadores  I2C  Touch pads  I2S  Mouse  USB  Salida  De temporizacion  Pantallas  Timers  LCD de caracteres  Counters  LCD Graficas  PWM / CCP  VGA  De entrada salida  Sonido  Controladores de memoria  DACs  Controladores de puertos  Codecs
  • 33. Tipos de drivers /2 Sincrónicos  Tambien llamados bloqueantes.  Por diseño la tarea que llama al driver esperara el resultado de la operación por la cual consulto.  No significa que otras tareas no puedan ocupar el tiempo del procesador.  Una vez completado se despertara a la tarea en espera y consumira su resultado.  Son mas simples que otro tipo de drivers.  Suelen utilizarse semáforos binarios para tal fin.  Se utilizan al menos 2 semáforos:  Uno para garantizar la captura del recurso (mutex)  Otro para informar la conclusion de la tarea.
  • 34. Tipos de drivers /3 Ejemplo driver sincrónico Tarea 1 Tarea 2 T
  • 35. Tipos de drivers /4 Ejemplo driver sincronico unsigned portCHAR cSendFrame(pI2sSendData pData) { unsigned portCHAR errCode; if (xSemaphoreTake(xMutex, (portTickType) xBlockTime ) != pdTRUE) //Intento tomar mutex { return ERR_SEM_TIMEOUT; } DoBgProcess(); //Proceso del HW en segundo plano if (xSemaphoreTake(xSem, (portTickType) xBlockTime ) == pdTRUE) //Espero que complete { errCode = SUCCESS; } else { errCode = ERR_TASK_TIMEOUT; } xSemaphoreGive(xMutex); //Libero Mutex return errCode; } void vI2sISR(void) { if (completed) { takeData(); xSemaphoreGiveFromISR(xSem, &xN); //Señalo evento de finalización } }
  • 36. Tipos de drivers /5 Asincrónicos  Por diseño la tarea que llama al driver puede continuar ejecutando sin esperar el resultado de la operación que pidio.  Oportunidad para avanzar tareas hasta que la operación este lista.  Mucho mas complejos de diseñar y a veces innecesarios  Mas impredecibles en su comportamiento  Metodos:  Poll  Señales / Slots  Callback
  • 37. Tipos de drivers /6 Ejemplo de driver asincrónico (Polled): Driver Tarea 1 Cola IRQ Hardware Soft
  • 38. Tipos de drivers /7 Ejemplo de driver asincrónico (Callback): Tarea 1 B Tarea 1 A T Driver Tarea 1 B
  • 39. Drivers desarrollados Lista de drivers desarrollados para FreeRTOS  Puerto serie  SPI  I2S  Fat  LCD gráfico  Timer
  • 40. Ejemplo de uso – audio player con FreeRTOS Aplicativo reproductor de archivos WAV SOC Servicio Chan’s FATFS RTC diskio Consulta RTC FreeRTOS SPI Driver I2S Driver PORT Hardware SPI I2S TIMER SD/MMC AUDIO CODEC Hardware externo
  • 41. Conclusiones Los RTOS: Consumen mas tiempo de procesador Consumen mas memoria Reducen la incertidumbre Reducen el tiempo de desarrollo Mejoran la mantenibilidad Mejoran la Abstraccion Mejoran la independencia de tareas Mejoran la escalabilidad Son menos suceptible a errores Permiten facilemente la priorizacion Facilitan la portabilidad
  • 42. Bibliografía • Using the FreeRTOS Real time Kernel, a Practical Guide - Richard Barry • http://freertos.org • Architecture of Device I/O Drivers" - David Kalinsky, Ph.D. • Linux Device Drivers, Third Edition - Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman • An embedded Software Primer – David E. Simon • http://elm-chan.org/fsw/ff/00index_e.html • http://www.cs.brown.edu/courses/csci1600/handouts/notes/ipc.pdf • http://sistemasembebidos.com.ar/foro
  • 46. Placa ARM7TDMI adaptada de LQFP64 a PDIP (XTAL, USB y JTAG) Ejemplo de uso para medicion de acelerometros
  • 47. Demo AudioPlayer Placa casera de desarrollo
  • 48. Ejemplo Driver de video Ejemplo Generador de ondas digital
  • 49. Codigo fuente de los ejemplos

Notas del editor

  1. F16 – Se volteaba al pasar la linea del ecuador Patriot – Error en la precision del tiempo calculaba mal el tracking del radar Therac_25 – Sobreexponia a los pacientes de radiacion Ariane-5 – Error en la matematica bloquea sistemas de navegacion ( flotat de 64 en espacio de 16 bits) Mars Climate Orbiter: Error de conversiones de millas y kilometros