Fundamentos de programación de Sistemas Embebidos … · 2018. 8. 31. · Fundamentos de...
Transcript of Fundamentos de programación de Sistemas Embebidos … · 2018. 8. 31. · Fundamentos de...
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Fundamentos de programacion de Sistemas EmbebidosIntroduccion
Mg. Ing. E. Sergio Burgos
Universidad Nacional de Entre RıosFacultad de Ingenierıa
Especializacion en Sistemas Embebidos
31/08/2018
1 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Calendario
Dıa Fecha Horario
Viernes 31/08/2018 9:00 - 18:00Sabado 01/09/2018 9:00 - 13:00
Viernes 14/09/2018 9:00 - 18:00Sabado 15/09/2018 9:00 - 13:00
Viernes 28/09/2018 9:00 - 18:00
Viernes 19/10/2018 9:00 - 18:00
Sabado 20/10/2018 9:00 - 13:00
Presentacion de TPs y coloquio
2 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Calendario
Dıa Fecha Horario
Viernes 31/08/2018 9:00 - 18:00Sabado 01/09/2018 9:00 - 13:00
Viernes 14/09/2018 9:00 - 18:00Sabado 15/09/2018 9:00 - 13:00
Viernes 28/09/2018 9:00 - 18:00
Viernes 19/10/2018 9:00 - 18:00
Sabado 20/10/2018 9:00 - 13:00
Presentacion de TPs y coloquio
2 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Calendario
Dıa Fecha Horario
Viernes 31/08/2018 9:00 - 18:00Sabado 01/09/2018 9:00 - 13:00
Viernes 14/09/2018 9:00 - 18:00Sabado 15/09/2018 9:00 - 13:00
Viernes 28/09/2018 9:00 - 18:00
Viernes 19/10/2018 9:00 - 18:00
Sabado 20/10/2018 9:00 - 13:00 Presentacion de TPs y coloquio
2 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Evaluacion
La evaluacion final del curso se realizara a traves de los trabajos practicos asociados a cada tematratado.
Los trabajos practicos deberan realizarse de modo individual.
En cada trabajo se deberan incluir observaciones relativas a los temas tratados.
La evaluacion se realizara a traves de la presentacion de los trabajos realizados mediante uncoloquio.
3 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Desarrollo de firmware
Alternativas
Metodo clasico (compilado):
Aplicaciones binarias (baremetal y/oRT OS).
Flujo de desarrollo:CodificacionCompilacionGrabacionDepuracion
Estructura estatica.
Herramientas: Gcc, Eclipse, OpenOCD(lpcOpen/Newlib)
Scripting (interpretado)
Interprete binario (baremetal)
Extension del interprete a traves demodulos
Aplicacion interpretadas en tiempo real(archivos de texto)
Alojamiento de entidades dinamico
Lenguajes: Micro Python, Lua
4 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Desarrollo de firmware
Alternativas
Metodo clasico (compilado):
Aplicaciones binarias (baremetal y/oRT OS).
Flujo de desarrollo:CodificacionCompilacionGrabacionDepuracion
Estructura estatica.
Herramientas: Gcc, Eclipse, OpenOCD(lpcOpen/Newlib)
Scripting (interpretado)
Interprete binario (baremetal)
Extension del interprete a traves demodulos
Aplicacion interpretadas en tiempo real(archivos de texto)
Alojamiento de entidades dinamico
Lenguajes: Micro Python, Lua
4 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Ejemplo scripting
5 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Ejemplo scripting
5 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Ejemplo scripting
5 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Ejemplo scripting
5 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Ejemplo scripting
5 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Ejemplo scripting
5 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Ejemplo scripting
5 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Ejemplo scripting
5 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Una aplicacion
Aplicacion script
-- Configura puertos
-- y conversor (ADC0 , Ch1)
function init()
adc.setup(adc.ADC_1 , adc.ENABLE)
gpio.setup(gpio.LED_1 , gpio.OUT)
gpio.setup(gpio.LED_2 , gpio.OUT)
gpio.setup(gpio.LED_3 , gpio.OUT)
gpio.write(gpio.LED_1 , gpio.LOW)
gpio.write(gpio.LED_2 , gpio.LOW)
gpio.write(gpio.LED_3 , gpio.LOW)
end
-- Verifica en que rango
-- se encuentra el argumento
function eval(val)
if (val <= 300) then
gpio.write(gpio.LED_1 , gpio.HIGH)
gpio.write(gpio.LED_2 , gpio.LOW)
gpio.write(gpio.LED_3 , gpio.LOW)
elseif (val >300) and (val <800) then
gpio.write(gpio.LED_1 , gpio.LOW)
gpio.write(gpio.LED_2 , gpio.HIGH)
gpio.write(gpio.LED_3 , gpio.LOW)
elseif (val >= 800) then
gpio.write(gpio.LED_1 , gpio.LOW)
gpio.write(gpio.LED_2 , gpio.LOW)
gpio.write(gpio.LED_3 , gpio.HIGH)
end
tmr.delay (1000)
end
-- Inicio del programa
print("Prueba del ADC , canal 1")
init()
salir = false
while not salir do
dato=adc.read(adc.ADC_1 , adc.CH1)
io.write("ADC Ch. 1: ", dato , "\n")
eval(dato)
print("Continuar? \"fin\" para")
print(" terminar")
salir = (io.read() == "fin")
end
6 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
El paradigma de la programacion orientada a objetos se basa en 3 elementos:
Abstraccion: extraer las caracterısticas principales de las entidades significativas en el dominiodel problema.
Encapsulamiento: encerrar los atributos significativos de cada entidad de modo que su accesosea controlado.
Modularidad: proceso de descomposicion de elementos significativos, de modo independiente,favoreciendo la reutilizacion.
7 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
El paradigma de la programacion orientada a objetos se basa en 3 elementos:
Abstraccion: extraer las caracterısticas principales de las entidades significativas en el dominiodel problema.
Encapsulamiento: encerrar los atributos significativos de cada entidad de modo que su accesosea controlado.
Modularidad: proceso de descomposicion de elementos significativos, de modo independiente,favoreciendo la reutilizacion.
7 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
El paradigma de la programacion orientada a objetos se basa en 3 elementos:
Abstraccion: extraer las caracterısticas principales de las entidades significativas en el dominiodel problema.
Encapsulamiento: encerrar los atributos significativos de cada entidad de modo que su accesosea controlado.
Modularidad: proceso de descomposicion de elementos significativos, de modo independiente,favoreciendo la reutilizacion.
7 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
Terminologıa de POO y relaciones:
Objetos
Clases
Herencia
Agregacion
Composicion
Polimorfismo
8 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
Terminologıa de POO y relaciones:
Objetos
Clases
Herencia
Agregacion
Composicion
Polimorfismo
8 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
Terminologıa de POO y relaciones:
Objetos
Clases
Herencia
Agregacion
Composicion
Polimorfismo
8 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
Terminologıa de POO y relaciones:
Objetos
Clases
Herencia
Agregacion
Composicion
Polimorfismo
8 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
Terminologıa de POO y relaciones:
Objetos
Clases
Herencia
Agregacion
Composicion
Polimorfismo
8 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
Terminologıa de POO y relaciones:
Objetos
Clases
Herencia
Agregacion
Composicion
Polimorfismo
8 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO
9 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO y C++
Ejemplo de representacion de perifericos a traves de clases en C++
#ifndef HWIO_H
#define HWIO_H
#include <cstdint >
class HwIO
{
protected:
uint32_t hwAddr;
public:
HwIO(uint32_t addr);
virtual void write(uint32_t data) = 0;
virtual uint32_t read(void) = 0;
virtual uint32_t availableData(void) = 0;
virtual bool ready(void) = 0;
};
#endif // HWIO_H
#ifndef SERIALUART_H
#define SERIALUART_H
#include "hwio.h"
class serialUart : public HwIO
{
public:
serialUart(uint32_t addr);
void write(uint32_t data);
uint32_t read(void);
uint32_t availableData(void);
bool ready(void);
};
#endif // SERIALUART_H
10 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO y C++
Una aplicacion utilizando polimorfismo
#include "hwio.h"
#include "gpio.h"
#include "serialuart.h"
int main()
{
int i;
HwIO *perif [5] =
{
new gpio(0 x0000A00F),
new gpio(0 x0000A01F),
new gpio(0 x0000A02F),
new gpio(0 x0000A03F),
new serialUart (0 x0000B000)
};
for(i = 0; i < 5; i++)
perif[i]->write (0x00);
. . .
}
Algunos detalles...
•RTTI •Excepciones •Diseno
11 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO y C++
Una aplicacion utilizando polimorfismo
#include "hwio.h"
#include "gpio.h"
#include "serialuart.h"
int main()
{
int i;
HwIO *perif [5] =
{
new gpio(0 x0000A00F),
new gpio(0 x0000A01F),
new gpio(0 x0000A02F),
new gpio(0 x0000A03F),
new serialUart (0 x0000B000)
};
for(i = 0; i < 5; i++)
perif[i]->write (0x00);
. . .
}
Algunos detalles...
•RTTI
•Excepciones •Diseno
11 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO y C++
Una aplicacion utilizando polimorfismo
#include "hwio.h"
#include "gpio.h"
#include "serialuart.h"
int main()
{
int i;
HwIO *perif [5] =
{
new gpio(0 x0000A00F),
new gpio(0 x0000A01F),
new gpio(0 x0000A02F),
new gpio(0 x0000A03F),
new serialUart (0 x0000B000)
};
for(i = 0; i < 5; i++)
perif[i]->write (0x00);
. . .
}
Algunos detalles...
•RTTI •Excepciones
•Diseno
11 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
POO y C++
Una aplicacion utilizando polimorfismo
#include "hwio.h"
#include "gpio.h"
#include "serialuart.h"
int main()
{
int i;
HwIO *perif [5] =
{
new gpio(0 x0000A00F),
new gpio(0 x0000A01F),
new gpio(0 x0000A02F),
new gpio(0 x0000A03F),
new serialUart (0 x0000B000)
};
for(i = 0; i < 5; i++)
perif[i]->write (0x00);
. . .
}
Algunos detalles...
•RTTI •Excepciones •Diseno
11 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Representacion
¿Cual es el orden de ejecucion? ¿Y la aplicacion?
12 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Algunas ideas
UML no es un lenguaje de programacion, sı es un lenguaje de modelado de proposito generalpara sistemas discretos tales como los compuestos por software, firmware o logica digital.
Se desarrollo como un esfuerzo para simplificar y estandarizar las metodologıas de desarrollode aplicaciones utilizando POO.
Utiliza diferentes tipos de diagramas para representar diferentes aspectos de los sistemas.
Los mas representativos para sistemas embebidos son, dependiendo del tipo de herramientasutilizadas, diagrama de clases, de secuencia y de estados.
13 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion
Generalidades Alternativas de desarrollo Paradigmas de programacion UML Programacion estructurada
Programacion estructurada
Todo programa estructurado se puede escribirse utilizando tres estructuras basicas:
Secuencia: Ejecucion secuencial de un conjunto de acciones.
Seleccion: Ejecucion condicional de un conjunto de acciones.
Iteracion: Repetir la ejecucion de un conjunto de acciones segun una condicion.
Todo algoritmo tendra necesariamente un punto de entrada y un punto de finalizacion.
Estas ideas nos llevan a la no utilizacion de saltos dentro de las aplicaciones (goto) ni interrupcionde bucles.
14 / 14 Fundamentos de programacion de Sistemas Embebidos Introduccion