1.075 visualizaciones desde el 14 de Enero del 2017
347,5 KB
21 paginas
Creado hace 18a (24/05/2006)
Instrumentación de Tiempo Real
UNIVERSIDAD DE CANTABRIA
Tema 1. Introducción
Tema 2. Recursos de acceso al hardware
Tema 3. Interrupciones
Tema 4. Puertas básicas de entrada/salida (I)
Tema 5. Recursos de temporización de bajo nivel
Tema 6. Multitarea en Ada
Tema 7. Puertas básicas de entrada/salida (II)
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
Medida_De_Velocidad;
Control_De_Frenos_ABS;
Control_De_Inyección_1;
Espera a que Tiempo = 20;
Medida_De_Velocidad;
Control_De_Inyección_2;
Espera a que Tiempo = 40;
Medida_De_Velocidad;
Control_De_Frenos_ABS;
Control_De_Inyección_3;
Espera a que Tiempo = 60;
Medida_De_Velocidad;
Control_De_Inyección_4;
Espera a que Tiempo = 80;
end loop;
end Control_Automóvil;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
Difícil de mantener:
• cualquier cambio en una tarea puede trastocar la
temporización
Difícil de entender
Obliga a partir la tarea Control_De_Inyección en trozos
• en ocasiones no será posible dividir una tarea
Solución más compleja cuando los periodos de las tareas no
son múltiplos
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
procedure Manejador_Tick is
...
begin
loop
if Han_Pasado_20ms then
Medida_De_Velocidad;
Han_Pasado_20ms:= False;
end if;
if Han_Pasado_40ms then
Control_De_Frenos_ABS;
Han_Pasado_40ms:= False;
end if;
if Han_Pasado_80ms then
Control_De_Inyección;
Han_Pasado_80ms:= False;
end if;
end loop;
end Control_Automóvil;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
Concurrencia no soportada por el
lenguaje: problemas
UNIVERSIDAD DE CANTABRIA
procedure Control_Automóvil is
procedure Manejador_Tick is
...
begin
loop
if Han_Pasado_20ms then
Medida_De_Velocidad;
Han_Pasado_20ms:= False;
end if;
if Han_Pasado_40ms then
Control_De_Frenos_ABS;
Han_Pasado_40ms:= False;
end if;
if Han_Pasado_80ms then
Control_De_Inyección;
Han_Pasado_80ms:= False;
end if;
end loop;
end Control_Automóvil;
Medida de
Velocidad
C=4 ms.
T=20 ms.
Control de
Frenos ABS
C=10 ms.
T=40 ms.
Control de
Inyección
C=40 ms.
T=80 ms.
¡¡Pérdida de
plazos!!
20
30
40
50
60
70
80
90
100 110 120
130
140
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
El Ada soporta la programación de procesos concurrentes
mediante las tareas (“tasks”)
Las tareas constan de especificación y cuerpo:
• en el cuerpo define una actividad que se ejecuta
independientemente de las demás tareas
task body Tarea is
declaración de variables;
begin
instrucciones (habitualmente un lazo infinito);
end Tarea;
Las tareas comienzan su ejecución de forma automática
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
procedure Control_del_Automóvil is
task Medida_Velocidad; -- especificación
task body Medida_Velocidad is -- cuerpo
begin
loop
Acciones de Medida_de_Velocidad;
Esperar al próximo periodo (20 ms);
end loop;
end Medida_Velocidad;
task Control_ABS; -- especificación
task body Control_ABS is -- cuerpo
begin
loop
Acciones de Control_ABS;
Esperar al próximo periodo (40 ms);
end loop;
end Control_ABS;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
type Time is private;
subtype Year_Number is Integer range 1901 .. 2099;
subtype Month_Number is Integer range 1 .. 12;
subtype Day_Number is Integer range 1 .. 31;
subtype Day_Duration is Duration range 0.0 .. 86_400.0;
function Clock return Time;
function Year (Date : Time) return Year_Number;
function Month (Date : Time) return Month_Number;
function Day (Date : Time) return Day_Number;
function Seconds (Date : Time) return Day_Duration;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
function Time_Of
(Year : Year_Number;
Month : Month_Number;
Day : Day_Number;
Seconds : Day_Duration := 0.0)
return Time;
function "+" (Left : Time; Right : Duration)
return Time;
function "+" (Left : Duration; Right : Time)
return Time;
function "-" (Left : Time; Right : Duration)
return Time;
function "-" (Left : Time; Right : Time)
return Duration;
...
end Ada.Calendar;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
Con la instrucción delay until es posible hacer tareas
periódicas:
task body Periodica is
Periodo : constant Duration := 0.050; -- en segundos
Proximo_Periodo : Time := Clock;
begin
loop
-- hace cosas
...
Proximo_Periodo := Proximo_Periodo + Periodo;
delay until Proximo_Periodo;
end loop;
end Periodica;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
También se puede hacer lo mismo (pero mal) con la orden
delay:
task body Periodica is
Periodo : constant Duration := 0.050; -- en segundos
Proximo_Periodo : Time := Clock;
begin
loop
-- hace cosas
P
Links de descarga
http://lwp-l.com/pdf1083
Comentarios de: Instrumentación de Tiempo Real - Tema 6. Multitarea en Ada (0)
Comentarios de: Instrumentación de Tiempo Real - Tema 6. Multitarea en Ada (0)
No hay comentarios