Está en la página 1de 34

Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Fundamentos de programación de Sistemas Embebidos


Introducción

Mg. Ing. E. Sergio Burgos

Universidad Nacional de Entre Rı́os


Facultad de Ingenierı́a
Especialización en Sistemas Embebidos

31/08/2018

1 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Calendario
Dı́a Fecha Horario
Viernes 31/08/2018 9:00 - 18:00
Sábado 01/09/2018 9:00 - 13:00
Viernes 14/09/2018 9:00 - 18:00
Sábado 15/09/2018 9:00 - 13:00
Viernes 28/09/2018 9:00 - 18:00
Viernes 19/10/2018 9:00 - 18:00
Sábado 20/10/2018 9:00 - 13:00

2 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Calendario
Dı́a Fecha Horario
Viernes 31/08/2018 9:00 - 18:00
Sábado 01/09/2018 9:00 - 13:00
Viernes 14/09/2018 9:00 - 18:00
Sábado 15/09/2018 9:00 - 13:00
Viernes 28/09/2018 9:00 - 18:00
Viernes 19/10/2018 9:00 - 18:00
Sábado 20/10/2018 9:00 - 13:00

2 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Calendario
Dı́a Fecha Horario
Viernes 31/08/2018 9:00 - 18:00
Sábado 01/09/2018 9:00 - 13:00
Viernes 14/09/2018 9:00 - 18:00
Sábado 15/09/2018 9:00 - 13:00
Viernes 28/09/2018 9:00 - 18:00
Viernes 19/10/2018 9:00 - 18:00
Sábado 20/10/2018 9:00 - 13:00 Presentación de TPs y coloquio

2 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Evaluación
La evaluación final del curso se realizará a través de los trabajos prácticos asociados a cada tema
tratado.
Los trabajos prácticos deberán realizarse de modo individual.
En cada trabajo se deberán incluir observaciones relativas a los temas tratados.
La evaluación se realizará a través de la presentación de los trabajos realizados mediante un
coloquio.

3 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Desarrollo de firmware

Alternativas
Método clásico (compilado):
Aplicaciones binarias (baremetal y/o
RT OS).
Flujo de desarrollo:
Codificación
Compilación
Grabación
Depuración

Estructura estática.
Herramientas: Gcc, Eclipse, OpenOCD
(lpcOpen/Newlib)

4 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Desarrollo de firmware

Alternativas
Método clásico (compilado): Scripting (interpretado)
Aplicaciones binarias (baremetal y/o Intérprete binario (baremetal)
RT OS).
Extensión del intérprete a través de
Flujo de desarrollo: módulos
Codificación
Compilación Aplicación interpretadas en tiempo real
Grabación (archivos de texto)
Depuración
Alojamiento de entidades dinámico
Estructura estática.
Lenguajes: Micro Python, Lua
Herramientas: Gcc, Eclipse, OpenOCD
(lpcOpen/Newlib)

4 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Ejemplo scripting

5 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Ejemplo scripting

5 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Ejemplo scripting

5 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Ejemplo scripting

5 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Ejemplo scripting

5 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Ejemplo scripting

5 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Ejemplo scripting

5 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Ejemplo scripting

5 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Una aplicación

Aplicación script

-- Configura puertos gpio . write ( gpio . LED_2 , gpio . HIGH )


-- y conversor ( ADC0 , Ch1 ) gpio . write ( gpio . LED_3 , gpio . LOW )
function init () elseif ( val >= 800) then
adc . setup ( adc . ADC_1 , adc . ENABLE ) gpio . write ( gpio . LED_1 , gpio . LOW )
gpio . setup ( gpio . LED_1 , gpio . OUT ) gpio . write ( gpio . LED_2 , gpio . LOW )
gpio . setup ( gpio . LED_2 , gpio . OUT ) gpio . write ( gpio . LED_3 , gpio . HIGH )
gpio . setup ( gpio . LED_3 , gpio . OUT ) end
gpio . write ( gpio . LED_1 , gpio . LOW ) tmr . delay (1000)
gpio . write ( gpio . LED_2 , gpio . LOW ) end
gpio . write ( gpio . LED_3 , gpio . LOW ) -- Inicio del programa
end print ( " Prueba del ADC , canal 1 " )
-- Verifica en que rango init ()
-- se encuentra el argumento salir = false
function eval ( val ) while not salir do
if ( val <= 300) then dato = adc . read ( adc . ADC_1 , adc . CH1 )
gpio . write ( gpio . LED_1 , gpio . HIGH ) io . write ( " ADC Ch . 1: " , dato , " \ n " )
gpio . write ( gpio . LED_2 , gpio . LOW ) eval ( dato )
gpio . write ( gpio . LED_3 , gpio . LOW ) print ( " Continuar ? \" fin \" para " )
elseif ( val >300) and ( val <800) then print ( " terminar " )
gpio . write ( gpio . LED_1 , gpio . LOW ) salir = ( io . read () == " fin " )
end

6 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO
El paradigma de la programación orientada a objetos se basa en 3 elementos:
Abstracción: extraer las caracterı́sticas principales de las entidades significativas en el dominio
del problema.
Encapsulamiento: encerrar los atributos significativos de cada entidad de modo que su acceso
sea controlado.

7 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO
El paradigma de la programación orientada a objetos se basa en 3 elementos:
Abstracción: extraer las caracterı́sticas principales de las entidades significativas en el dominio
del problema.
Encapsulamiento: encerrar los atributos significativos de cada entidad de modo que su acceso
sea controlado.
Modularidad: proceso de descomposición de elementos significativos, de modo independiente,
favoreciendo la reutilización.

7 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO
El paradigma de la programación orientada a objetos se basa en 3 elementos:
Abstracción: extraer las caracterı́sticas principales de las entidades significativas en el dominio
del problema.
Encapsulamiento: encerrar los atributos significativos de cada entidad de modo que su acceso
sea controlado.
Modularidad: proceso de descomposición de elementos significativos, de modo independiente,
favoreciendo la reutilización.

7 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO
Terminologı́a de POO y relaciones:
Objetos
Clases

8 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO
Terminologı́a de POO y relaciones:
Objetos
Clases
Herencia

8 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO
Terminologı́a de POO y relaciones:
Objetos
Clases
Herencia
Agregación

8 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO
Terminologı́a de POO y relaciones:
Objetos
Clases
Herencia
Agregación
Composición

8 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO
Terminologı́a de POO y relaciones:
Objetos
Clases
Herencia
Agregación
Composición
Polimorfismo

8 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO
Terminologı́a de POO y relaciones:
Objetos
Clases
Herencia
Agregación
Composición
Polimorfismo

8 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO

9 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO y C++
Ejemplo de representación de periféricos a través de clases en C++

# ifndef HWIO_H # ifndef SERIALUART_H


# define HWIO_H # define SERIALUART_H
# include < cstdint > # include " hwio . h "

class HwIO class serialUart : public HwIO


{ {
protected : public :
uint32_t hwAddr ; serialUart ( uint32_t addr );
public : void write ( uint32_t data );
HwIO ( uint32_t addr ); uint32_t read ( void );
virtual void write ( uint32_t data ) = 0; uint32_t availableData ( void );
virtual uint32_t read ( void ) = 0; bool ready ( void );
virtual uint32_t availableData ( void ) = 0; };
virtual bool ready ( void ) = 0;
}; # endif // S E R I A L U A R T _ H

# endif // HWIO_H

10 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO y C++
Una aplicación 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 (0 x00 );
. . .
}

11 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO y C++
Una aplicación 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 (0 x00 );
. . .
}

Algunos detalles...
•RTTI

11 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO y C++
Una aplicación 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 (0 x00 );
. . .
}

Algunos detalles...
•RTTI •Excepciones

11 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

POO y C++
Una aplicación 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 (0 x00 );
. . .
}

Algunos detalles...
•RTTI •Excepciones •Diseño

11 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Representación

¿Cuál es el órden de ejecución? ¿Y la aplicación?

12 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Algunas ideas
UML no es un lenguaje de programación, sı́ es un lenguaje de modelado de propósito general
para sistemas discretos tales como los compuestos por software, firmware o lógica digital.
Se desarrolló como un esfuerzo para simplificar y estandarizar las metodologı́as de desarrollo
de aplicaciones utilizando POO.
Utiliza diferentes tipos de diagramas para representar diferentes aspectos de los sistemas.
Los más representativos para sistemas embebidos son, dependiendo del tipo de herramientas
utilizadas, diagrama de clases, de secuencia y de estados.

13 / 14 Fundamentos de programación de Sistemas Embebidos Introducción


Generalidades Alternativas de desarrollo Paradigmas de programación UML Programación estructurada

Programación estructurada
Todo programa estructurado se puede escribirse utilizando tres estructuras básicas:
Secuencia: Ejecución secuencial de un conjunto de acciones.
Selección: Ejecución condicional de un conjunto de acciones.
Iteración: Repetir la ejecución de un conjunto de acciones según una condición.
Todo algoritmo tendrá necesariamente un punto de entrada y un punto de finalización.
Estas ideas nos llevan a la no utilización de saltos dentro de las aplicaciones (goto) ni interrupción
de bucles.

14 / 14 Fundamentos de programación de Sistemas Embebidos Introducción

También podría gustarte