Date post: | 03-Feb-2015 |
Category: |
Documents |
Upload: | felicidad-bernabe |
View: | 12 times |
Download: | 3 times |
ADAADAIntroducciónIntroducción
Un lenguaje de programación para sistema empotrados
ÍndiceÍndice
Introducción histórica Aspectos generales Tipos Estructuras de control Subprogramas Paquetes Excepciones Tareas
Introducción históricaIntroducción histórica 1974. US DoD percibe un elevado gasto en software. En el ámbito de sistemas
empotrados había un elevado número de leguajes en uso. 1975. Strawman. Requisitos del nuevo lenguaje. Refinado en Woodenman. 1976. Timan. Identificada la funcionalidad del nuevo lenguaje. Se evaluaron
lenguajes existentes para comprobar si cubrían la funcionalidad especificada. Resultado negativo. Se revisaron los requisitos y se generó Ironman.
Invitación para proponer el diseño del nuevo lenguaje. Se recibieron 16 propuestas y se seleccionaron 4. CII Honeywell Bull (Green), Intermetrics (Red), Softech (Azul), SRI International (Yellow). Los diseños iniciales se entregaron en 1978 y se evaluaron internacionalmente. Fueron preseleccionados los equipos Rojo y Verde. Se les dio un año más para mejorar. El 2 de mayo de 1979 se seleccionó la propuesta del lenguaje Verde desarrollada por un
equipo internacional dirigido por Jean Ichbiah. El DoD anunció que el nuevo lenguaje se llamaría Ada en honor de Augusta Ada
Byron (hija de Lord Byron). Ada fue ayudante y patrocinadora de Charles Babagge y trabajó en su máquina analítica mecánica. Se la considera la primera programadora.
1983. ADA estándar ANSI (RM83). 1987. ADA estándar ISO (8652).
Introducción históricaIntroducción histórica Ada se empezó a utilizar en muy diferentes áreas,
además de en sistemas empotrados. En 1988 arrancó el proyecto Ada 9X.
Se propusieron 41 nuevos requisitos junto con 22 estudios específicos de áreas que todavía no se entendían completamente.
Construir un compilador que tuviera en cuenta todas las propuestas nuevas parecía costoso e innecesario.
Ada 95 se constituyó como un núcleo fundamental, junto con una serie de anexos opcionales (estándar ISO 15-2-1995).
Se generaron los siguientes documentos de referencia: Reference Manual for the Ada Programming Language (RM95). Annotated Ada Reference Manual (AARM).
Aspectos generalesAspectos generales Identificadores.
Identificador ::= letra{[subrayado]letra_o_digito} letra_o_digito ::= letra | digito
Literales numéricos Tipos básicos:
Integer, float. Ej. Num_alumnos : Integer; Temperatura : Float;
Tanto los enteros como los reales pueden tener exponentes, pero en el caso de los enteros los exponentes no pueden ser negativos.
Ej. 10.22E-12 12E2 Base del número.
Ej. 2#1010# 16#AF28# 4#32#E8 (32 x 48) Comentarios.
-- Esto es un comentario
Aspectos generalesAspectos generales
DeclaraciónI : integer;P: integer := 6;Q : constant Float := 8.1632;
Bloques y visibilidad declare i,k : integer; begin …… declare i : integer; begin ……. end; …… end;
TiposTipos
Declaración de tiposType Color is (Rojo, Amarillo, Verde);
C : Color := Verde;
Q: constant Color := Verde;
Type Esquema is array (0..5) of integer;
Perfil : Esquema;
…………………..
Perfil(0) := 105;
Declaración de subtiposSubtype Dia is integer range 1..31;
D : Dia;
TiposTiposTipos numéricos simplesP: Integer;
Q : Float;
AtributosSubtype Natural is integer range 0..Integer’Last;
Subtype Positive is integer range 1..Integer’Last;
Cambio de tipoI: Integer := 3;
F: Float := 5.6;
……
I := Integer( F ) + I;
F := F + Float( I );
TiposTipos
Todos los tipos
Compuestos
Tarea
Objeto protegido
Discreto
Enumerado
Registro
Entero
Con signo
Array Modular
Elementales
EscalarReal
Coma flotante
Coma fija
Ordinario
Acceso Decimal
Operador Operación Operando(s) Resultado
And
Or
xor
Y lógico
O inclusivo
O exclusivo
Booleanos
Booleanos
Booleanos
Booleano
Booleano
Booleano
=
/=
<
<=
>
>=
Igualdad
Desigualdad
Menor que
Menor o igual que
Mayor que
Mayor o igual que
Cualquiera
Cualquiera
Escalar
Escalar
Escalar
Escalar
Booleano
Booleano
Booleano
Booleano
Booleano
Booleano
+
-
Adición
Substracción
Numérico
Numérico
Igual
Igual
+
-
Identidad
Negación
Numérico
Numérico
Igual
Igual
*
/
Mod
Rem
Multiplicación
División
Módulo
Resto
Integer o Float
Integer o Float
Integer
Integer
Integer o Float
Integer o Float
Integer
Integer
**
Not
Abs
Exponenciación
Negación
Valor absoluto
Integer, Natural o
Float, Integer
Booleano
Numérico
Integer
Float
Booleano
Igual
Operadores escalares
Estructuras de controlEstructuras de controlif Comando = Izquierda then
Girar_Izquierda;
elsif Comando = Derecha then
Girar_Derecha;
elsif Comando = Acelerar then
Incrementar_Velocidad;
elsif Comando = Decelerar then
Decrementar_Velocidad;
else
Mantener_Velocidad;
end if;
Estructuras de controlEstructuras de control
case Comando is
when Izquierda => Girar_Izquierda;
when Derecha => Girar_Derecha;
when Acelerar => Incrementar_Velocidad;
when Decelerar => Decrementar_Velocidad;
when others => Mantener_Velocidad;
end case;
Estructuras de controlEstructuras de control
loop
Coge_tenedores;
Come;
Medita;
end loop;
loop
if Hora_Dormir then
exit;
end if;
Coge_tenedores;
Come;
Medita;
end loop;
Estructuras de controlEstructuras de control
loop
exit when Hora_Dormir;
Coge_tenedores;
Come;
Medita;
end loop;
Estructuras de controlEstructuras de controlfor x in 1..3 loop
Medita;
Coge_tenedores;
Come;
end loop;
while not Hora_Dormir loop
Coge_tenedores;
Come;
Medita;
end loop;
for x in reverse 0..10 loop
Di_Numero( x );
end loop;
Sentencias
Simple
Secuencial
NullAsignación
Llamada a procedimientoLlamada a entry
RequeueDelayAbortCode
Control
Exit
Goto
Raise
Return
Compuesta
Secuencial
If
Case
Loop
Block
ParaleloAccept
Select
SubprogramasSubprogramas
Subprograma ::= procedure nombre parámetros |function nombre parámetros resultado
parámetros ::= (especificación{; especificación})
especificación ::= lista_identificadores: modo subtipo
modo ::= [in | in out | out] resultado ::= return subtipo
SubprogramasSubprogramasFunction factorial( N: Positive) return Positive isBegin if N = 1 then return 1; else return N * factorial( N – 1 ); end if;End factorial;
Procedure Add (A, B : in integer; C: out integer) isBegin C := A+B;End Add;
SubprogramasSubprogramas
Function “*” (A, B: Vector) return Float isResultado : Float := 0.0;
begin for x in A’Range loop
Resultado := Resultado + A(x)*B(x); end loop; return Resultado;end “*”;
PaquetesPaquetes
package Pila_enteros is
procedure Push( x: in integer );
function Pop return integer;
end Pila_enteros;
Package body Pila_enteros is Max: constant := 100; S: array(1..Max) of integer; Cima: integer range 0..Max;
procedure Push( x: integer) is begin Cima := Cima + 1; S(Cima) := x; end Push;
function Pop return integer is begin Cima := Cima -1; return S(Cima); end Pop;begin Cima := 0;end Pila_enteros;
ExcepcionesExcepciones
Permiten tratar situaciones poco frecuentes, pudiendo controlar con ellas un fracaso del SW.
Hay cuatro predefinidas Constraint_Error Program_Error Storage_Error Tasking_Error
ExcepcionesExcepciones
begin …………. ……….....exception when Constraint_Error => -- Tratamiento especifico
end;
ExcepcionesExcepciones
package Pila_enteros is
Error: exception;
procedure Push( x: in integer );
function Pop return integer;
end Pila_enteros;
Package body Pila_enteros is……….……….
procedure Push( x: integer) is begin if Cima = Max then raise Error; end if; Cima := Cima + 1; S(Cima) := x; end Push;
……….……….
end Pila_enteros;
ExcepcionesExcepcioneswith Pila_enteros;
procedure Actuar isbegin
……….……….
Pila_enteros.Push(5);……….……….
exception When Error => put(“Error en la pila”);end Actuar;
TareasTareas
Permiten implementar acciones paralelas Ada suministra posibilidades añadidas
Sincronización (rendezvous) Objetos protegidos Facilidades para programación de sistemas
de tiempo real
BibliografíaBibliografía
Programming in ADA 95. John Barnes. Addison-Wesley.
Real-Time Systems and Programming Languages. Alan Burns, Andy Wellings. Addison-Wesley.