2. Objetivo General
•Conocer los conceptos sobre sistemas
embebidos y sus aplicaciones industriales
y científicas, así como los elementos
necesarios para su desarrollo.
3. Objetivos Específicos
• Introducir a los estudiantes en el mundo de los sistemas
embebidos y sus aplicaciones.
• Conocer las plataformas para el desarrollo de aplicaciones
con sistemas embebidos.
• Saber que lenguajes son los mas utilizados en la
programación de sistemas embebidos.
• Conocer el proceso de diseño de un sistema embebido.
4. Temario
• Introducción a sistemas embebidos.
• Herramientas de desarrollo para sistemas embebidos, compiladores o
interpretadores, editor y simulador de ambiente embebido y uso de
lenguaje de alto nivel.
• Lenguajes de Programación para sistemas embebidos; Programación
estructurada, identificadores y palabras claves.
• Lenguajes de Programación para sistemas embebidos; Tipos de datos,
declaración de variables, constantes. (comparación entre c y python)
• Lenguajes de Programación para sistemas embebidos; Funciones y librerías
en lenguajes de alto nivel.
• Proceso de diseño de un sistema embebido
6. ¿Qué es un Sistema Embebido?
• Se conoce como sistema embebido a un circuito electrónico computarizado que esta diseñado para
cumplir una labor especifica en un producto. Un dispositivo que ofrece confiabilidad, inteligencia,
conectividad, interacción con el entorno y/o productividad.
• Un sistema embebido o empotrado (integrado, incrustado) es un sistema de computación diseñado para
realizar una o algunas pocas funciones dedicadas, frecuentemente en un sistema de computación en
tiempo real. Al contrario de lo que ocurre con los ordenadores de propósito general (como por ejemplo una
computadora personal o PC) que están diseñados para cubrir un amplio rango de necesidades, los
sistemas embebidos se diseñan para cubrir necesidades específicas.
Temario
7. ¿Qué es un Sistema Embebido?
• En un sistema embebido la mayoría de los componentes se encuentran incluidos en la placa base (tarjeta
de vídeo, audio, módem, etc.) y muchas veces los dispositivos resultantes no tienen el aspecto de lo que se
suele asociar a una computadora.
• Algunos ejemplos de sistemas embebidos podrían ser dispositivos como un taxímetro, un sistema de
control de acceso, la electrónica que controla una máquina expendedora o el sistema de control de una
fotocopiadora entre otras múltiples aplicaciones.
Temario
10. • Un compilador es un programa de software que transforma uno o varios
archivos de código fuente y genera un archivo en código de máquina
llamado ejecutable; este nuevo archivo es enviado al “target” para que lo
ejecute.
¿Qué es un Compilador?
Temario
11. • Un interpretador es un software que es instalado en el “target”, el cual está
preparado para recibir un archivo fuente editado; una vez el “target” recibe
la orden de ejecutar inicia el proceso de cambiar línea por línea de programa
a su respectivo código de máquina y ejecutar este código.
¿Qué es un Interpretador?
Temario
12. Diferencia
• El programa editado es llevado a la máquina que lo ejecutará finalmente, en este
caso un microcontrolador comúnmente llamado “target”, de dos formas posibles:
1. El programa es convertido a código de máquina al 100% y luego se ejecuta.
2. El programa es enviado al “target” tal cual fue editado, y éste toma línea por línea
y lo va convirtiendo a código de máquina a medida que va pasando por él.
• En el primer caso se dice que el código es compilado, y en el segundo caso, que el
código es interpretado.
Temario
13. Herramientas de desarrollo para
sistemas embebidos, compiladores o
interpretadores, editor y simulador de
ambiente embebido y uso de lenguaje
de alto nivel.
Temario
14. ¿Qué es una plataforma de desarrollo?
Una plataforma de desarrollo es el ambiente o entorno de software
común en el cual se desenvuelve la programación de un grupo definido
de aplicaciones. Comúnmente se encuentra relacionada directamente
a un sistema operativo; sin embargo, también es posible encontrarla
ligada a una familia de lenguajes de programación o a una interfaz de
programación de aplicaciones (API, por las siglas en inglés: Application
Programming Interface). Cabe recordar que funciona como sistema
plataforma o multiusuario.
16. Arduino IDE
Temario
Link: https://www.arduino.cc/en/main/software
El entorno de desarrollo integrado (IDE) de Arduino es una aplicación
multiplataforma (para Windows, macOS, Linux ) que está escrita en
el lenguaje de programación Java. Se utiliza para escribir y cargar
programas en placas compatibles con Arduino, pero también, con la
ayuda de núcleos de terceros, se puede usar con placas de desarrollo
de otros proveedores.
18. MPLAB X IDE
Temario
Link: https://www.microchip.com/mplab/mplab-x-ide
MPLAB ® X Integrated Development Environment (IDE) es un programa
de software ampliable y altamente configurable que incorpora
herramientas poderosas para ayudarlo a descubrir, configurar,
desarrollar, depurar y calificar diseños integrados para la mayoría de los
microcontroladores y controladores de señales digitales de
Microchip. MPLAB X IDE funciona a la perfección con el ecosistema de
desarrollo de software y herramientas MPLAB, muchos de los cuales son
completamente gratuitos.
19. MPLAB X IDE
Temario
Link: https://www.microchip.com/mplab/mplab-x-ide
MPLAB X IDE trae una serie de características para ayudarlo a depurar rápidamente sus
proyectos y minimizar su tiempo de desarrollo. Algunas características más nuevas incluyen:
•Visualizador de datos: no es necesario comprar herramientas de visualización adicionales ya
que los datos de transmisión en tiempo real se pueden ver en el Visualizador de datos
•Vista de E / S: los estados de los pines se pueden verificar y manipular con la Vista de E / S
para una verificación rápida del hardware
•Recursos de diseño útiles: ahorre tiempo con enlaces útiles a bibliotecas de software, hojas de
datos y guías de usuario que se proporcionan automáticamente
•Fácil de usar: las definiciones de registro y bits ahora están a solo un clic de distancia
20.
21. PlatformIO
• Está construido sobre el Código Visual Studio de Microsoft: editor gratuito, de código abierto y
con licencia MIT.
• Desarrollo rápido: C / C ++ Finalización inteligente de código y Smart Code Linter para un rápido
desarrollo profesional. Flujo de trabajo de proyectos múltiples con paneles múltiples. Temas
Soporte con colores oscuros y claros.
• Desarrollo Embebido: Sistema de compilación multiplataforma sin dependencias externas del
sistema operativo: más de 750 placas integradas , más de 30 plataformas de desarrollo , más de
20 marcos . Compatible con Arduino y ARM mbed.
• Depurador unificado: PIO Unified Debugger con soporte para múltiples arquitecturas y
plataformas de desarrollo que le permite depurar más de 250 placas integradas con
configuración cero.
Temario
Link:https://platformio.org/
23. PythonThonny IDE
• Thonny viene con Python 3.7 integrado, por lo que solo se necesita un
instalador simple y estás listo para aprender a programar. (También puede
usar una instalación de Python por separado, si es necesario). La interfaz de
usuario inicial se despoja de todas las características que pueden distraer a
los principiantes.
Temario
Link: https://thonny.org/
25. Quartus
Temario
Link:
https://www.intel.com/content/www/us/en/programmable/downloads
/download-center.html
Quartus II es una herramienta de software producida por Altera para el análisis y la síntesis de diseños
realizados en HDL.
Quartus II permite al desarrollador o desarrolladora compilar sus diseños, realizar análisis temporales,
examinar diagramas RTL y configurar el dispositivo de destino con el programador.
Con el programa de diseño Quartus ® II los diseñadores pueden usar los dispositivos HardCopy Stratix de
manera que puede prever y verificar su rendimiento, el cual resulta en promedio un 50 por ciento más rápido
que su FPGA equivalente. Además, en el flujo de diseño del HardCopy Stratix, Quartus II incluye una serie de
utilidades que reducen el tiempo de diseño. Como contraste adicional el bajo precio del Quartus II en
comparación con otras herramientas de diseño de ASIC.
31. ¿Qué es Programación estructurada?
• Es un paradigma de programación orientado a mejorar la claridad, calidad y
tiempo de desarrollo de un programa de computadora, utilizando
únicamente subrutinas y tres estructuras: secuencia, selección (if y switch) e
iteración (bucles for y while), considerando innecesario y contraproducente
el uso de la instrucción de transferencia incondicional (GOTO), que podría
conducir a "código espagueti", que es mucho más difícil de seguir y de
mantener, y era la causa de muchos errores de programación.
Temario
32. Identificadores en lenguaje C
• Un identificador es usado para dar nombre a un objeto. Este empieza por
una letra o el carácter “underscore” _, seguido por una letra o un dígito. Los
identificadores son sensibles a mayúscula y minúscula, de tal manera que
vBle1 es diferente de vBLE1 e identifican objetos diferentes. Un
identificador puede contener hasta 255 caracteres aunque en la práctica no
se recomiendan identificadores de más de 20 caracteres.
Temario
33. Identificadores en Python
• Los identificadores son los nombres que colocamos a las variables para identificar
una de otra. En la entrada anterior podrán observar que puse variables con los
nombres "x" y "y"; sin embargo, estas variables pueden tener tantos nombres
como se nos ocurran. Así, yo pude haber puesto, en lugar de "x", "naranjas"; y en
lugar de "y" pude haber puesto "tomates" y Python seguiría ejecutando el
programa de la misma manera. Pero hay ciertas restricciones que debemos de
considerar y es que Python tan solo admite una secuencia cualquiera conformada
por algunos de los siguientes caracteres:
• de la a a la z
• de la A a la Z
• números
• guiones bajos ( _ ) Temario
34. Identificadores en Python
• Versiones recientes de Python también admiten vocales con acentos; sin embargo,
tenemos que tener en cuenta algunos consejos y reglas para que nuestro código no
carezca de legibilidad, lo cual es importante para que nos sea más fácil identificar
variables en caso de que haya qué corregir o modificar nuestro programa:
• Python nota la diferencia entre mayúsculas y minúsculas, por lo tanto, variables como
"Promedio", "promedio", "PROMEDIO" y "proMEDio", son 4 identificadores diferentes
para Python.
• Evita identificadores que te dificulten la legibilidad de tu código. Por ejemplo, "hóla" o
"precIo" son identificadores que no facilitan la lectura y la misma identificación de las
variables. Por algo son llamados identificadores.
• Trata siempre de usar identificadores que tengan algo que ver con la información que
estaremos guardando en cada variable. Nunca uses una variable identificada como
"suma" cuando en realidad está siendo una resta o viceversa; o no utilices "mediana"
cuando en realidad estás calculando el promedio.
• Cuando quieras hacer identificadores que incluyan varias palabras utiliza el guión bajo y
evita escribir todas las palabras juntas, pues puede confundirte; por ejemplo: En lugar de
escribir "preciodelalechuga" escribe "precio_de_la_lechuga".
Temario
35. Tipos de datos, declaración de variables,
constantes. (comparación entre c y python)
Temario
36. Tipos de datos en C
C ofrece tres tipos de datos básicos:
• Números enteros definidos con la palabra clave int
• Letras o caracteres definidos con la palabra clave char
• Números reales o en coma flotante definidos con las palabras claves float o double
Temario
37. Números Enteros
Se definen con “int” y admiten de forma opcional dos prefijos
modificadores:
“short” y “long”: Modifica el tamaño en bits del entero. Existen por
tanto tres tipos de enteros: “int”, “short int” (que se puede abreviar
como “short”), y “long int” (que se puede abreviar como “long”).
El lenguaje C no define tamaños fijos para sus tipos de datos básicos.
Lo único que garantiza es que un short int tiene un tamaño menor o
igual que un int y este a su vez un tamaño menor o igual a un long
int. Esta característica del lenguaje ha complicado la creación de
programas que sean compatibles entre varias plataformas.
“unsigned”: define un número natural (mayor o igual a cero).
Temario
38. Letras y cadenas
• Las variables de tipo letra se declaran como “char”. Para referirse a una letra se
rodea de comillas simples: 'M'. Como las letras se representan internamente como
números, el lenguaje C permite realizar operaciones aritméticas como 'M' + 25.
• Las cadenas de texto o strings son simplemente tablas de “char”. Las funciones de
biblioteca para manipular estas cadenas asumen que el último byte tiene valor
cero. Las cadenas de texto se escriben en el programa rodeadas de dobles comillas
y contienen el valor cero al final. A continuación se muestran dos definiciones:
Temario
39. Números Reales
• Los números reales se definen con “float” o “double”. La diferencia entre ambas es la
precisión que ofrece su representación interna. Hay un número infinito de reales, pero se
representan con un número finito de bits. A mayor número de bits, mayor número de reales
se representan, y por tanto, mayor precisión. Los reales definidos con “double” tienen un
tamaño doble a los definidos con “float”. Al igual que en el caso de los enteros, el tamaño
de estas representaciones varía de una plataforma a otra.
• Algunas plataformas ofrecen números reales con tamaño mayor al “double” que se definen
como “long double”. Los tamaños típicos para los tipos “float”, “double” y “long double”
son 4, 8 y 12 bytes respectivamente. A continuación se muestran varias definiciones de
números reales.
Temario
40. Tipos de datos en Python
Particularidades los tipos de datos en Python.
• Tipos dinámicos.
Python es un lenguaje que no requiere que se defina el tipo de un objeto. El intérprete "infiere" el tipo de dato del que se trata.
• Fuertemente tipado.
Existen operaciones que no están permitidas entre tipos que no sean compatibles.
• Los tipos son clases.
En Python todos sus elementos son objetos y los datos una vez identificados, se convierten objetos instanciados del tipo al
que pertenecen.
Temario
41. Tipos Numéricos
Números enteros (int).
Python identifica a los número enteros como un tipo de dato el cual puede ser expresado
de la siguiente manera.
Decimal: 24, 60
Binario: 0b010011, 0b1101
Hexadecimal: 0x18, 0x3cf4
Octal: 030, 074
Python 2 también identifica a un tipo llamado entero largo (long), al cual se le añadía la
letra "L" al final, pero ya no son reconocidos por Python 3.
Temario
42. Tipos Numéricos
Números de punto flotante (float).
Los objetos tipo float corresponden al conjunto de los números reales.
3.141595
12.
-45.3556
Precisión de los números flotantes.
Hay que tomar en cuenta de que la precisión de los números dependen en gran medida de la capacidad del equipo de cómputo,
por lo que en ocasiones una operación con números de tipo float no dará el resultado exacto, sino una aproximación.
Ejemplo:
2.0/3.0
0.6666666666666666
En este caso, es imposible para Python calcular una sucesión infinita de "6" y por ende truncó el número a 16 decimales.
Temario
43. Tipos Numéricos
Números complejos (complex).
Los objetos de tipo complex corresponden al conjunto de los números complejos.
Siempre que el componente en los números reales sea distinto de 0, los objetos de tipo complex
se expresarán como un par de números de tipo floatseparados por el operador de adición "+",
en el que el primer número corresponde al componente en los números reales y el componente
en los números imaginarios es identificado añadiéndole la letra "j" al final.
6.32 + 45j
0.117j
(2 + 0j)
1j
Temario
44. Tipos Numéricos
Valores booleanos (bool).
El tipo booleano es una especie de tipo numérico que es utilizado para evaluar
expresiones lógicas.
Si la expresión lógica es cierta, el resultado esTrue (con mayúscula al principio).
Si la expresión lógica NO es cierta, el resultado es False (con mayúscula al
principio).
False equivale numéricamente a 0. Cualquier otro número equivale a True y su
valor por defecto es 1.
Temario
45. Cadenas de caracteres
Cadenas de caracteres (str) .
Las cadenas de caracteres son secuencias de caracteres encerradas entre comillas (" ") o apóstrofes
(' ') indistintamente.
'Hola Mundo'
"Vamos al McDonald's“
None.
El tipo None representa un valor "vació".
Temario
47. Funciones en lenguaje C
La estructura general de una función en C es:
Donde:
• tipo_de_retorno: es el tipo del valor devuelto por la función, o, en caso de que la función no devuelva
valor alguno, la palabra reservada void.
• nombre_de_la_función: es el nombre o identificador asignado a la función.
• lista_de_parámetros: es la lista de declaración de los parámetros que son pasados a la función. Éstos se
separan por comas. Debemos tener en cuenta que pueden existir funciones que no utilicen parámetros.
• cuerpo_de_la_función: está compuesto por un conjunto de sentencias que llevan a cabo la tarea
específica para la cual ha sido creada la función.
• return expresión: mediante la palabra reservada return, se devuelve el valor de la función, en este caso
representado por expresión.
Temario
51. Funciones en Python
• Para declarar una función solo se debe poner la palabra "def" seguido del
nombre de la función, para el ejemplo le hemos puesto "sumar", en los
paréntesis deben ir los parámetros, ya hablaremos de eso más adelante, por
último la palabra "pass" es el contenido de la función. Siempre tengan en
cuenta la identación dentro de la función.
Temario
52. Funciones en Python
• Si bien en el ejemplo anterior creamos una función que suma 5 + 10
eso no es suficiente, ahora vamos a enviarle parámetros a esa
función y sumar los datos que le enviemos. Ahora el código.
Temario
54. Librerias de Python
• Requests
Es según sus creadores Python HTTP para humanos. La librería requests te
permitirá hacer peticiones por http de una manera sencilla. Cuando se hace
una petición, requests automáticamente decodificará el contenido extraido
de un servidor y la mayoría de caracteres unicode serán decodificados
correctamente.
Temario
56. Librerias de Python
• tqdm
Barras de progreso para Python. Las barras de progreso son bastante útiles
porque ayudan a hacer que los trabajos de procesamiento de datos sean
menos dolorosos entre otras cosas porque mostrarán una estimación
confiable de cuánto tiempo tomará y el porque el usuario puede ver de
inmediato si una tarea se ha detenido.
Temario
58. Librerias de Python
• Pillow
Una herramienta para manipular imágenes. Es un fork de PIL y es más fácil de
usar, bastante útil si trabajas con imágenes frecuentemente.
Temario
60. Librerias de Python
• Pillow
El resultado será una ventana con la imagen de tamaño diferente. Antes de
mostrar la ventana se creará una nueva imagen con el tamaño asignado.
Temario
61. Librerias de Python
• scrapy
Scrapy es framework que te permitirá rastrear sitios web y extraer datos
estructurados que pueden utilizarse para una amplia gama de aplicaciones,
como la extracción de datos, el procesamiento de información o el archivo
histórico.
Temario
63. Librerias de Python
• Numpy
Es el paquete más usado para computación científica con Python. Contiene,
entre otras cosas:
• Un poderoso objeto de matriz N-dimensional
• Funciones sofisticadas (broadcasting)
• Herramientas para la integración de código C / C ++ y Fortran.
• Álgebra lineal útil, transformada de Fourier y capacidades de números
aleatorios.
Temario
64. Librerias de Python
• Pandas
• Es una biblioteca de código abierto con licencia BSD que proporciona
estructuras de datos de alto rendimiento, fáciles de usar y herramientas de
análisis de datos para el lenguaje de programación Python.
• Pretende ser un bloque de construcción fundamental para realizar análisis
prácticos de datos del mundo real con Python. Pandas es muy extenso y
para entender mejor todo lo que puedes hacer es mejor pasar por la página
del proyecto.
Temario
65. Librerias de Python
• Scapy
• Permite enviar, rastrear y diseccionar y falsificar paquetes de red. Esta capacidad
permite la construcción de herramientas que pueden sondear, escanear o atacar
redes.
• En otras palabras, Scapy es un poderoso programa interactivo de manipulación de
paquetes. Es capaz de forjar o decodificar paquetes de una gran cantidad de
protocolos, enviarlos por cable, capturarlos, hacer coincidir solicitudes y
respuestas, y mucho más. Scapy puede manejar fácilmente la mayoría de las
tareas clásicas como escaneo, rastreo de rutas, sondeo, pruebas unitarias, ataques
o descubrimiento de redes. Puede reemplazar hping, arpspoof, arp-sk, arping, p0f
e incluso algunas partes de Nmap, tcpdump y tshark)
Temario
66. Librerias de Python
• Matplotlib
Matplotlib es una biblioteca de trazado 2D que produce gráficas de buena
calidad en una variedad de formatos y entornos interactivos. Podrás generar
gráficas, histogramas, espectros de potencia, gráficas de barras, gráficas de
errores, diagramas de dispersión, etc., con unas pocas líneas de código.
Temario
67. Librerias de Python
• Kivy
Es una biblioteca de software de código abierto para el rápido desarrollo de
aplicaciones equipadas con interfaces de usuario novedosas, como las
aplicaciones multitáctiles. Es proyecto multiplataforma con un módulo
para Python 2 y Python 3.
Temario
68. Librerias de Python
• Nltk
NLTK es una plataforma líder para la creación de programas en Python para
trabajar con datos en lenguaje humano. Proporciona interfaces fáciles de usar
para más de 50 recursos corporales y léxicos, como WordNet, junto con un
conjunto de bibliotecas de procesamiento de texto para clasificación,
tokenización, derivación, etiquetado, análisis y razonamiento semántico,
wrappers para bibliotecas NLP muy solidas.
Temario
69. Librerias de Python
• Keras
Es una API de redes neuronales de alto nivel, escrita en Python y capaz de
ejecutarse sobre TensorFlow, CNTK o Theano. Fue desarrollada para permitir
a los desarrolladores experimentación rápida. Con al filosofía de «Poder pasar
de la idea al resultado con el menor retraso posible es clave para hacer una
buena investigación».
Temario
70. Librerias de Python
• SQLAlchemy
• Es el kit de herramientas SQL para Python y un mapeador relacional de
objetos que ofrece a los desarrolladores de aplicaciones el máximo poder y
flexibilidad de SQL.
• Proporciona un conjunto completo de patrones de persistencia conocidos a
nivel empresarial, diseñados para el acceso a bases de datos eficientes y de
alto rendimiento.
Temario
71. Librerias de Python
• Django
Es un framwork web para Python de alto nivel que fomenta el desarrollo
rápido y el diseño limpio y pragmático. Creado por desarrolladores
experimentados, se encarga de gran parte de las complicaciones del desarrollo
web, por lo que podrás concentrarte en escribir aplicaciones sin necesidad de
reinventar la rueda. Es gratis y de código abierto.
Temario
72. Librerias de Python
• Twisted
Twisted es un framework de red que se basa en el paradigma de la
programación dirigida por eventos, quiere decir que los usuarios de Twisted
pueden escribir pequeños callbacks (retrollamadas) predefinidos en el
framework para realizar tareas complejas. Está bajo la licencia MIT.
Temario