270 likes | 643 Views
ADA Introducción. Un lenguaje de programación para sistema empotrados. Índice. Introducción histórica Aspectos generales Tipos Estructuras de control Subprogramas Paquetes Excepciones Tareas. Introducción histórica.
E N D
ADAIntroducción Un lenguaje de programación para sistema empotrados
Índice • Introducción histórica • Aspectos generales • Tipos • Estructuras de control • Subprogramas • Paquetes • Excepciones • Tareas
Introducció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ó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 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 generales • Declaración • I : integer; • P: integer := 6; • Q : constant Float := 8.1632; • Bloques y visibilidad • declare • i,k : integer; • begin • …… • declare • i : integer; • begin • ……. • end; • …… • end;
Tipos Declaración de tipos Type 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 subtipos Subtype Dia is integer range 1..31; D : Dia;
Tipos Tipos numéricos simples P: Integer; Q : Float; Atributos Subtype Natural is integer range 0..Integer’Last; Subtype Positive is integer range 1..Integer’Last; Cambio de tipo I: Integer := 3; F: Float := 5.6; …… I := Integer( F ) + I; F := F + Float( I );
Estructuras de control if 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 control case Comando is when Izquierda => Girar_Izquierda; when Derecha => Girar_Derecha; when Acelerar => Incrementar_Velocidad; when Decelerar => Decrementar_Velocidad; whenothers => Mantener_Velocidad; end case;
Estructuras 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 control loop exit when Hora_Dormir; Coge_tenedores; Come; Medita; end loop;
Estructuras de control while not Hora_Dormir loop Coge_tenedores; Come; Medita; end loop; for x in 1..3 loop Medita; Coge_tenedores; Come; end loop; for x in reverse 0..10 loop Di_Numero( x ); end loop;
Subprogramas • 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
Subprogramas Function factorial( N: Positive) return Positive is Begin 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) is Begin C := A+B; End Add;
Subprogramas Function “*” (A, B: Vector) return Float is Resultado : Float := 0.0; begin for x in A’Range loop Resultado := Resultado + A(x)*B(x); end loop; return Resultado; end “*”;
Paquetes 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; package Pila_enteros is procedure Push( x: in integer ); function Pop return integer; end Pila_enteros;
Excepciones • Permiten tratar situaciones poco frecuentes, pudiendo controlar con ellas un fracaso del SW. • Hay cuatro predefinidas • Constraint_Error • Program_Error • Storage_Error • Tasking_Error
Excepciones begin …………. ………..... exception when Constraint_Error => -- Tratamiento especifico end;
Excepciones 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; package Pila_enteros is Error: exception; procedure Push( x: in integer ); function Pop return integer; end Pila_enteros;
Excepciones with Pila_enteros; procedure Actuar is begin ………. ………. Pila_enteros.Push(5); ………. ………. exception When Error => put(“Error en la pila”); end Actuar;
Tareas • Permiten implementar acciones paralelas • Ada suministra posibilidades añadidas • Sincronización (rendezvous) • Objetos protegidos • Facilidades para programación de sistemas de tiempo real
Bibliografía • Programming in ADA 95. John Barnes. Addison-Wesley. • Real-Time Systems and Programming Languages. Alan Burns, Andy Wellings. Addison-Wesley.