Está en la página 1de 8

 SISTEMAS OPERATIVOS EN TIEMPO REAL (Freertos)

 Arduino
 Programación en paralelo (multitasking o multithreading)
 Ted.com hacer un resumen del video

SISTEMAS OPERATIVOS EN TIEMPO REAL

Un sistema operativo en tiempo real (RTOS) hace más fácil la programación de sistemas embebidos
complejos, porque estructura el programa en tareas y gestiona los tiempos de uso del procesador para
cada tarea ofreciendo una sensación de simultaneidad, aunque en realidad las tareas se estén ejecutando
secuencialmente según las prioridades definidas.

Todo sistema operativo tiene una capa de drivers que se encarga de la gestión de la comunicación con
periféricos y módulos propios del microcontrolador. Después de esto está la capa del sistema operativo,
la cual gestiona los tiempos y prioridades de cada una de las tareas. Finalmente está la capa de
aplicación.

Los diferentes tipos de sistemas operativos en tiempo real son:

 MQX: Es un sistema operativo con más de 15 años y hace parte del gabinete de software de
Freescale. Este sistema operativo cuenta con stacks o librerías para aplicaciones TCP/IP, USB Host,
USB Device y HTTP Web server. El sistema está disponible para las familias de microcontroladores
ColdFire de freescale y el entorno de programación es bajo Software Codewarrior. Aunque el
MQX se distribuye de manera libre el software Codewarrior tiene limitaciones en cuanto a la
cantidad de código si no se dispone una licencia para este.

 FreeRTOS: Es un sistema operativo en tiempo real que se puede implementar en 27 arquitecturas


de microcontroladores existente en el mercado, tales como Freescales, Texas Instruments,
Renesas, Atmel y Microchip. El tipo de licencia es GLP. El núcleo o Kernel de este sistema
operativo es pequeño y simple, el cual está compuesto por tres o cuatro archivos en C. En el sitio
web podemos encontrar ejemplos específicos para cada familia de microcontroladores.

 DuinOS: Este sistema operativo es desarrollado por una institución argentina llamada
RobotGroup, su estructura es similar al FreeRTOS, pero para microcontroladores Arduino y
completamente basado en código abierto.
 TinyOS: Este sistema operativo es basado en Open Source especialmente para aplicaciones
inalámbricas como redes de sensores, edificios inteligentes y medidores inteligentes.

Ventajas de usar RTOS:

Con unos pequeños ajustes la aplicación se puede implementar en cualquier familia de


microcontroladores (Microchip, Freescale, Atmel, etc.). Con sistemas operativos en tiempo real (RTOS) el
programador se enfoca más en hacer el código para la aplicación.

Desventajas de usar RTOS:


El solo código del sistema operativo ocupa gran cantidad de memoria y procesamiento. Por lo tanto, no
es recomendable usarlo en microcontroladores pequeños de 8 bits, en lo posible se deben usar
microcontroladores de 32 bits con mínimo 60kb de memoria flash. Algunos de los microcontroladores
más usados son los ColdFire V1-V4 de Freescale o ARM de 32bits.

ARDUINO:

Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en


proyectos multidisciplinarios. Toda la plataforma, incluyendo sus componentes de hardware
(esquemáticos) y Software, son liberados con licencia de código abierto que permite libertad de acceso a
ellos.

El hardware consiste en una placa de circuito impreso con un microcontrolador, usualmente Atmel AVR,
puertos digitales y analógicos de entrada/salida, los cuales pueden conectarse a placas de expansión
(shields), que amplían los funcionamientos de la placa Arduino. Asimismo, posee un puerto de conexión
USB desde donde se puede alimentar la placa y establecer comunicación con el computador.

Por otro lado, el software consiste en un entorno de desarrollo (IDE) basado en el entorno
de processing y lenguaje de programación basado en Wiring, así como en el cargador de
arranque (bootloader) que es ejecutado en la placa. El microcontrolador de la placa se programa
mediante un computador, usando una comunicación serie mediante un convertidor de niveles RS-232 a
TTL.

Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a
software tal como Adobe Flash, Processing, Max/MSP, Pure Data, etc. Una tendencia tecnológica es
utilizar Arduino como tarjeta de adquisición de datos desarrollando interfaces en software como JAVA,
Visual Basic y LabVIEW.6 El entorno de desarrollo integrado es software libre, y por tanto se puede
descargar y modificar gratuitamente; utiliza la licencia Creative Commons, con copyleft y derechos de
atribución al autor.

PROGRAMACION EN PARALELO

La computación paralela es el uso de múltiples recursos computacionales para resolver un problema. Se


distingue de la computación secuencial en que varias operaciones pueden ocurrir simultáneamente.

El paralelismo clásico, o puesto de otra manera, el clásico uso del paralelismo, es el de diseño de
programas eficientes en el ámbito científico. La simulación de problemas científicos es un área de gran
importancia, los cuales requieren de una gran capacidad de procesamiento y de espacio de memoria,
debido a las complejas operaciones que se deben realizar.

Otro uso clásico es el de las gráficas generadas por computadora GPUs. La generación de fotogramas
requiere de una gran cantidad de cálculos matemáticos. Esto supone una tarea muy compleja para un
solo procesador, luego es necesario que haya algún tipo de paralelismo, para distribuir la tarea para que
esta sea realizada eficiente y eficazmente.

El interés por la computación paralela se remonta a finales de los años 50. Este interés se vio expresado
en forma de supercomputadores, que aparecieron en los años 60 y 70. Estos computadores tenían
procesadores de memoria compartida, con múltiples procesadores trabajando lado a lado con datos
compartidos.

A mediados de los 80, un nuevo tipo de computador paralelo fue creado cuando el proyecto
“Concurrent Computation” de Caltech construyó un supercomputador para aplicaciones científicas. El
sistema mostró que se podría lograr un rendimiento extremo usando microprocesadores regulares,
disponibles en el mercado.

Empezando a los finales de los 80, los clúster surgieron para competir y con los MPP. Un clúster es un
tipo de computador paralelo, construido usando múltiples computadores “off-the-shelf”, conectados
usando una red “off-the-shelf”. Hoy en día, los clúster son la arquitectura dominante en los datacenters
(centros de data o servidores).
Para los MPP y clusters surgió el estándar MPI a mediados de los 90, que convergió de otras API. Para los
multiprocesadores con memoria compartida, un proceso de convergencia similar se observó a finales de
los 90, con el surgimiento de pthreads y OpenMP.

En la actualidad, la computación paralela se ha vuelto muy importante prácticamente, con la llegada de


los procesadores de varios núcleos casi por defecto en la mayoría de dispositivos computacionales.

El software ha sido una parte activa en la evolución de la programación paralela. Los programas
paralelos son más difíciles de escribir que los programas secuenciales, ya que se requiere que haya una
comunicación y sincronización entre las tareas que se han paralelizado.

Ventajas

 Resuelve problemas que no se podrían realizar en una sola CPU


 Resuelve problemas que no se pueden resolver en un tiempo razonable
 Permite ejecutar problemas de un orden y complejidad mayor
 Permite ejecutar código de manera más rápida (aceleración)
 Permite ejecutar en general más problemas
 Obtención de resultados en menos tiempo
 Permite la ejecución de varias instrucciones en simultáneo
 Permite dividir una tarea en partes independientes

Desventajas

 Mayor consumo de energía


 Mayor dificultad a la hora de escribir programas
 Dificultad para lograr una buena sincronización y comunicación entre las tareas
 Retardos ocasionados por comunicación ente tareas
 Número de componentes usados es directamente proporcional a los fallos potenciales
 Condiciones de carrera
 Múltiples procesos se encuentran en condición de carrera si el resultado de los mismos depende
del orden de su llegada
 Si los procesos que están en condición de carrera no son correctamente sincronizados, puede
producirse una corrupción de datos
Tipos de paralelismo

 Paralelismo a nivel de bit:

Se habla de paralelismo al nivel de bit, cuanto se aumenta el tamaño de la cadena a procesar, este
aumento reduce el número de instrucciones que tiene que ejecutar el procesador en variables cuyos
tamaños sean mayores a la longitud de la cadena.

 Paralelismo a nivel de instrucción

Este tipo de paralelismo consiste en cambiar el orden de las diferentes instrucciones de un programa y
juntarlas en grupos para posteriormente ser ejecutados en paralelo sin alterar el resultado final del
programa

 Paralelismo de datos

El paralelismo a nivel de datos es ampliamente usado, en esta clasificación, los datos de entrada se
distribuyen en los diferentes procesadores y cada uno realiza la misma acción sobre el conjunto de datos
que le fue asignado. Un ejemplo claro de esto es la suma de dos vectores, donde cada elemento del
vector A se suma 1 a 1 con cada elemento del vector B.

 Paralelismo de tareas

Básicamente este tipo de paralelismo consiste en asignar una tarea a cada procesador; estas tareas
pueden ser completamente diferentes y se les puede aplicar cualquier operación.

En conclusión la programación en paralelismo ofrece muchas ventajas adicionales que se encuentran en


la programación normal o en serie puesto que sus tareas se pueden dividir en otras mas pequeñas
aumentando el tiempo de procesado y además nos ofrece la posibilidad de un sistema multitarea que
hace varios procesos a la ves gracias a los nuevos procesadores multinúcleo que permite dividir la tarea,
y también las GPUs que al tener elevado numero de núcleos de procesamiento permite realizar varias
tareas a la vez, claro a cambio de un mayor consumo de energía, permite una programación en paralelo
que es de gran ayuda en la computación gráfica, predicción del clima y cambio climático, análisis de
imágenes multiespectrales y también en proyectos de astronomía.
RESUMEN DEL VIDEO DE TED.COM

Fei-Fei Li
at
TED2015
How we're teaching computers to understand pictures. (Como
nosotros enseñamos a las computadoras a entender imágenes)
Al momento que una niña de tan solo 3 años empieza a describir lo que observa en una imagen y nos da
un relato de lo que ve, nos dice una cosa, que a su corta edad ya puede entender lo que ve en una
imagen, por eso nos lleva a que las supercomputadoras más avanzadas que realizan millones de
operaciones a la vez, por supuesto dada por el programador, todavía tienen inconvenientes para realizar
una tarea que parece ser fácil para nosotros la cual es entender una imagen, nos encontramos en un
mundo que con el paso del tiempo se va actualizando a las referencias tecnológicas, un claro ejemplo
son los autos se conducen solos, pero estos al no tener una capacidad de entender las imágenes no sabe
si al manejar en la carretera se encuentra un bulto de papel el cual simplemente se puede sobrepasar o
si es una roca del mismo tamaño que debemos evitar, otro ejemplo de las cámaras de seguridad
automatizadas pero estas no nos alertan al momento de que un niño se esta ahogando en una piscina.

Las cámaras pueden tomar fotos convirtiendo luz en matrices numéricas bidimensionales conocidas
como pixeles, pero estos son solo números vacíos. En sí mismos no tienen significado.

Un nuevo campo de investigación se llama "visión artificial y aprendizaje automático". Es parte del
campo de la inteligencia artificial. Queremos enseñar a las máquinas a ver tal como nosotros lo
hacemos: nombrar objetos, identificar personas, inferir la geometría 3D de las cosas, entender
relaciones, emociones, acciones e intenciones. Nosotros tejemos historias completas de la gente, los
lugares y las cosas simplemente con mirarlas. Pero las maquinas al no tener emociones o experiencias
no pueden realizar esas actividades

Si consideramos los ojos de un niño como un par de cámaras biológicas, toman una foto cada 200
milisegundos, el tiempo promedio en que el ojo hace un movimiento. Entonces, a los 3 años un niño ha
visto cientos de millones de fotografías del mundo real. Esos son muchos ejemplares de entrenamiento.
Así que, en lugar de enfocarnos solo en mejorar los algoritmos, la intención fue dotar a los algoritmos
con los datos de entrenamiento (experiencias) que un niño adquiere con la experiencia tanto en
cantidad como en calidad.
En 2009, el proyecto ImageNet juntó una base de datos con 15 millones de imágenes de 22 000 tipos de
objetos organizados por palabra en inglés de uso cotidiano. En cantidad y calidad, tuvieron una escala
sin precedentes.

Ahora que tenemos los datos para nutrir el cerebro de la computadora, es decir las experiencias,
estamos listos para volver a los algoritmos. La abundancia de información aportada por ImageNet fue el
complemento perfecto para un tipo particular de algoritmos de aprendizaje automático llamado red
neuronal convolucional, ideado por Kunihiko Fukushima, Geoff Hinton y Yann LeCun en los años 70 y 80.
Como el cerebro que tiene miles de millones de neuronas muy bien conectadas, la unidad operativa
fundamental en una red neuronal es un nodo con forma de neurona. Toma datos de otros nodos los
procesa y los manda a otros nodos. Además, estos cientos de miles o incluso millones de nodos se
organizan en capas jerárquicas, algo parecido al cerebro. En una red neuronal típica que usamos para
entrenar nuestro modelo de reconocimiento de objetos hay 24 millones de nodos, 140 millones de
parámetros y 15 000 millones de conexiones. Es un modelo enorme. Alimentado por la información
masiva de ImageNet y las CPUs y GPUs modernas que entrenan este inmenso modelo, la red neuronal
convolucional tuvo un éxito inesperado.

Pero. ¿Eso es todo? ¿Acaso la computadora ya sobrepasó las capacidades humanas? No tan rápido.
Hasta ahora solo hemos enseñado a la computadora a ver objetos. Es como un niño pequeño que
aprende a decir palabras. Es un logro increíble, pero es apenas el primer paso. Pronto daremos otro
paso y los niños empiezan a comunicarse con frases. Así que en lugar de decir que hay un gato en la
foto, la niña ya dice que el gato está sobre la cama.

Así que para enseñar a una computadora a ver una foto y generar frases la conjunción de mucha
información y el algoritmo de aprendizaje automático debe dar otro paso. Ahora, la computadora tiene
que aprender de fotografías, así como de frases en lenguaje natural generado por humanos. De la forma
en que el cerebro integra visión y lenguaje, desarrollamos un modelo que conecta partes de cosas
visuales como fragmentos visuales con palabras y frases en oraciones.

Finalmente juntamos todo esto y produjimos uno de los primeros modelos de visión artificial que puede
generar frases como las de un humano cuando ve una foto por primera vez.

Por el momento ya enseñamos a las computadoras como entender las imágenes y describir lo que
sucede en ellas, todavía falta mucho por hacer como, por ejemplo, hacer que comprendan sentimientos
describir las imágenes mas allá y dar una descripción mas detallada. Por ahora las computadoras
aprendieron describir las imágenes, pero esto es solamente un paso para lo que se viene a futuro,
Utilizando programación en paralelo o las mas conocidas “Redes Neuronales” fue posible este proyecto.