PDF de programación - Prácticas de Sistemas de Tiempo Real

Imágen de pdf Prácticas de Sistemas de Tiempo Real

Prácticas de Sistemas de Tiempo Realgráfica de visualizaciones

Publicado el 15 de Octubre del 2018
754 visualizaciones desde el 15 de Octubre del 2018
132,9 KB
33 paginas
Creado hace 13a (10/09/2010)
Prácticas de Sistemas de Tiempo Real

Curso 2010–2011

Juan Zamorano Flores, Francisco Sánchez Moreno

jzamora@fi.upm.es, fsanchez@fi.upm.es

Departamento de Arquitectura y Tecnología de Sistemas Informáticos

Facultad de Informática

Universidad Politécnica de Madrid

Marzo 2011

Índice general

Normas Generales

1. Práctica 1: Planificación cíclica

. . . .
. .

1.3.1. Depuración . . .

. . . .
1.1. Descripción . . .
1.2. Codificación en Ada
. . . .
1.3. Plataforma de desarrollo . . . .
. . . .
1.4. Codificación en C/POSIX . . . .
1.5. Plataforma de desarrollo . . . .
. . . .
1.6. Trabajo práctico .
1.7. Material a entregar
. . . .

. . . .
. . .

2. Práctica 2: Planificación multitarea
. . . .
2.1. Descripción . . .
. . . .
2.2. Tareas esporádicas
. . . .
2.3. Codificación en Ada
2.4. Codificación en C/POSIX . . . .
. . . .
2.5. Trabajo práctico .
2.6. Material a entregar
. . . .

. . . .
. . .
. .

. . . .
. . .

. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .

. . .
. . .
. . .
. . .
. . .
. . .

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

. . .
. . .
. . .
. . .
. . .
. . .

1

3
3
3
6
7
8
9
11
11

13
13
14
15
21
28
28

I

II

ÍNDICEGENERAL

Normas Generales

Para poder aprobar será necesario presentar las prácticas 1 y 2 de este cuaderno de
prácticas.

Se hará examen en Junio y Septiembre. Su peso en la nota será de un 33 % (el mismo
para cada práctica), siendo necesario aprobarlo con una nota igual o superior a 5.

La detección de copia en alguna práctica supondrá suspender el curso completo por
la parte copiadora y para los copiados también. Por tanto, se recomienda a todos
los alumnos proteger sus cuentas adecuadamente, poner palabras clave, y estar al
tanto cuando envíen listados para evitar el robo de los mismos. En caso de robo
de listados, los alumnos deberán comunicar dicha incidencia en el departamento
por correo electrónico, adjuntando una copia del programa que estaba en el listado
robado.

Se utilizará el correo electrónico, siempre que se pueda, como forma habitual de
comunicación alumno–profesor.

Las prácticas podrán realizarse en grupos de una o dos personas. Si bien en la nota
de cada práctica se tendrá en cuenta el número de alumnos del grupo: por ejemplo,
una práctica que obtiene un 7 en un grupo de dos puede obtener un 9 si es individual.

Todas las prácticas deberán presentarse en el plazo fijado dentro de cada convo-
catoria. Aquellas prácticas que se presenten fuera de plazo, serán corregidas en la
siguiente convocatoria. El plazo de entrega coincide con el día del examen.

Todas las prácticas deberán respetar las normas de presentación descritas para cada
práctica en particular.

Los alumnos deben inscribirse a la lista de correo de la asignatura mandando su
nombre a fsanchez@fi.upm.es

1

Capítulo 1

Práctica 1: Planificación cíclica

1.1. Descripción

La práctica 1 de Sistemas de Tiempo Real consiste en la realización de un planificador

cíclico que permita planificar un conjunto de tareas que debe construir el alumno.

Dicho conjunto de tareas tiene las siguientes características temporales:

Tarea Tiempo de Cómputo Período Plazo de respuesta

A
B
C
D
E

3
3
2
2
2

10
10
20
20
20

10
10
20
20
20

Cuadro 1.1: Características temporales de las tareas

El tiempo de cómputo, el plazo de respuesta y el período están expresados en segun-
dos. Nótese que el plazo de respuesta coincide con el período de cada tarea y que estos
son armónicos entre sí.

1.2. Codificación en Ada

La primera parte de esta práctica consiste en codificar el planificador cíclico y las tar-
eas utilizando el lenguaje de programación Ada. En particular, se utilizará el subconjunto
definido en el perfil de Ravenscar.

El perfil de Ravenscar establece un conjunto de restricciones para el lenguaje Ada, la
definición de este subconjunto de Ada se puede encontrar en el fichero ravenscar.ps
en el directorio /usr/local/openravenscar/apoyo de batman. Sin embargo,
desde el punto de vista de esta práctica, las restricciones más importantes son que no se
puede usar la sentencia delay, el paquete Ada.Calendar y el paquete Ada.Text_IO.
El sistema de compilación Ada que se usará GNAT/ORK está basado en el compilador
GNAT, y el conjunto de restricciones correspondientes al perfil de Ravenscar se establece
colocando el fichero de configuración gnat.adc en el mismo directorio donde residen
los fuentes.

3

4

CAPÍTULO1. PRÁCTICA1:PLANIFICACIÓNCÍCLICA

gnat.adc

pragma Ravenscar;
pragma Restrictions (No IO);
pragma Task Dispatching Policy (FIFO Within Priorities);
pragma Locking Policy (Ceiling Locking);

El código de las tareas deberá:

Imprimir en pantalla la indicación del comienzo de cada ejecución: "Tarea <nom-
bre(A B ...)><minutos:segundos>". Como no se puede utilizar el paquete Ada.
Text_IO, se utilizará el paquete Kernel.Serial_Output que proporciona
el sistema de compilación GNAT/ORK. Este paquete permite imprimir objetos del
tipo String a través de una línea serie del computador de ejecución.

Simular el tiempo de cómputo mediante una sentencia delay until Hora ac-
tual + Tiempo de Cómputo. El tiempo de cómputo correspondiente a la es-
critura en pantalla se considera despreciable.

Cada tarea se implementará como un procedimiento. El planificador cíclico invocará

estos procedimientos de forma que se verifiquen sus requisitos temporales.

La estructura del planificador cíclico es la siguiente:

cyclic_executive.adb

with Kernel.Serial Output;
use Kernel.Serial Output;

with Tareas;

with Ada.Real Time;
use Ada.Real Time.Time Span;
use type Ada.Real Time.Time;

procedure cyclic executive is

type Minor Cycle type is mod . . .;
Minor Cycle: Minor Cycle type := 0;
Minor Cycle Duration : constant Ada.Real Time.Time Span :=

Ada.Real Time.Milliseconds (. . .);

Next Time : Ada.Real Time.Time := Tareas.Time Zero + Minor Cycle Duration;

begin

loop

delay until Next time;
case Minor Cycle is

when 0 => Tareas.Tarea A;

Tareas.Tarea B;
. . .

when 1 => Tareas.Tarea A;

Tareas.Tarea C;
. . .

. . .

end case;
Minor Cycle := Minor Cycle + 1;
Next Time := Next time + Minor Cycle Duration;
if Ada.Real Time.Clock > Next Time then

Put Line ("Error de desbordamiento");

5

10

15

20

25

30

1.2. CODIFICACIÓNENADA

5

end if;
end loop;

end cyclic executive;

Las tareas se codificarán en un paquete llamado tareas cuya estructura es la siguiente:

tareas.ads

with Ada.Real Time;

package Tareas is

Time Zero : constant Ada.Real Time.Time := Ada.Real Time.Clock;

procedure Tarea A;

procedure Tarea B;

. . .

end Tareas;

tareas.adb

with Ada.Real Time;
use type Ada.Real Time.Time;
use type Ada.Real Time.Time Span;

with Kernel.Serial Output;
use Kernel.Serial Output;

package body Tareas is

procedure Tarea A is

. . .
begin

−− Obtener el número de segundos transcurridos desde el tiempo
−− inicial con Ada.Real Time.To Duration
Segundos Duration := Ada.Real Time.To Duration(

Ada.Real Time.Clock − Time Zero);

−− Calcular minutos y segundos
−− Se puede convertir los segundos que es un Duration a entero.
Segundos enteros := Integer (Segundos Duration);
. . .

−− Imprimir “Tarea A <minutos:segundos>”
Put("Tarea A ");
Put(Integer’Image(minutos));
Put(Integer’Image(segundos));
New line;

−− Consumir tiempo de cómputo
delay until Ada.Real Time.Clock +

Ada.Real Time.Milliseconds (tiempo de computo);

end Tarea A;

. . .

35

5

10

5

10

15

20

25

30

35

6

end Tareas;

CAPÍTULO1. PRÁCTICA1:PLANIFICACIÓNCÍCLICA

1.3. Plataforma de desarrollo

Una vez codificados el programa principal y el paquete tareas, para compilar, enlazar y
montar se utilizará el sistema de compilación GNAT/ORK (http://www.openravenscar.org).
Este sistema de compilación permite desarrollar software en Ada utilizando las re-
stricciones del perfil de Ravenscar en computadores i386 GNU/Linux y SPARC/Solaris.
El código generado se ejecuta en computadores basados en el ERC32, que es un proce-
sador resistente a la radiación desarrollado por la ESA (European Space Agency).

El sistema se encuentra instalado en batman en el directorio /usr/local/open-
ravenscar y, para poder utilizarlo, el directorio /usr/local/openravenscar/
bin debe de estar incluido en la variable de entorno PATH.

Por otra parte, como no se dispone de computadores reales se utilizará el simulador
TSIM (http://www.gaisler.com) que se encuentra instalado en mismo directorio de bat-
man.

Para compilar, enlazar y montar el programa cyclic_executive se puede utilizar
el siguiente Makefile, que se encuentra en batman en el directorio /usr/local/open-
ravenscar/apoyo/practica1/ada.

Makefile

#−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
#
#−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

EXAMPLES Makefile

# the Main procedure
MAIN = cyclic executive

# the gnatmake
GNATMAKE = sparc−ork−gnatmake

# Gnat1 compilation flags
GF = −g
# Do not use optimization for debugging
#GF = −O2

# Gnatbind flags
BF =

# Gnatlink flags
LF = −k −specs ork specs −mcpu=cypress

#−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
# Main rule

all :

$(MAIN).adb
$(GNATMAKE) $(MAIN) −cargs $(GF) −bargs $(BF) −largs $(LF)

clean : force

@/bin/rm −f *.o *.nm *.ali b˜*.* *.s *˜ $(MAIN) *.map

force :

5

10

15

20

25

30

1.3. PLATAFORMADEDESARROLLO

7

Si se ordena:

make

La salida mostrada, en caso de no haber errores, será:

sparc-ork-gnatmake cyclic_executive -cargs -g -bargs
-specs ork_specs -mcpu=cypress
sparc-ork-gcc -c -g cyclic_executive.adb
sparc-ork-gcc -c -g tareas.adb
sparc-ork-gnatbind -x cyclic_executive.ali
sparc-ork-gnatlink -k -specs ork_specs -mcpu=cypress
  • Links de descarga
http://lwp-l.com/pdf13885

Comentarios de: Prácticas de Sistemas de Tiempo Real (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad