Escolar Documentos
Profissional Documentos
Cultura Documentos
TIEMPO REAL
3. Tipificacin de datos
4. Estructuras de control
5. Descomposicin en mdulos
6. Tratamiento de los errores en ejecucin
6.1. Dominio del manejador de excepciones
6.2. Propagacin de la excepcin
6.3. El modelo de reanudacin frente al de terminacin
6.4. Tratamiento de excepciones en Ada
Pgina 1
1. Introduccin.
Los lenguajes de programacin son la herramienta con la que
describimos la tarea que el computador debe realizar.
En el caso de los sistemas empotrados es una cuestin muy
importante ya que la eleccin del lenguaje tendr repercusiones
en la seguridad, exactitud y coste del sistema final.
El propsito de este tema es exponer algunas de las
caractersticas de los lenguajes de programacin a la hora de la
eleccin del lenguaje.
Los primeros programas de tiempo real estaban escritos en
ensamblador debido
Pgina 2
Pgina 3
Pgina 4
2.1. Seguridad
La seguridad en un lenguaje se mide en trminos de cuan
efectivo es el compilador y el sistema en ejecucin para
detectar errores de programacin automticamente En la
mayora de los sistemas el software es ms complejo que el
hardware y por tanto la probabilidad de fallo es ms alta.
Las caractersticas de un lenguaje que facilite la deteccin de
fallos son:
Utilizacin de datos tipificados. Obligando al programador a
especificar todas las propiedades de las variables utilizadas e el
programa y de esta forma el compilador puede comprobar si estas
propiedades estn siendo violadas. Detectar los fallos en tiempo de
compilacin es ms fcil y econmico que detectar los fallos en
tiempo de ejecucin.
Obligacin de declarar variables
La utilizacin de una sintaxis que no sea ambigua
Pgina 5
2.2. Legibilidad
La legibilidad es una medida de la facilidad para entender el
programa sin la ayuda de otra documentacin, obtenindose as
ventajas como:
Reduccin de la documentacin.
Facilidad de deteccin de errores.
Facilidad de mantenimiento.
Pgina 6
2.3. Flexibilidad
Un buen lenguaje debe dar todas las facilidades necesarias para
expresar todas las operaciones requeridas por la aplicacin sin
la necesidad de recurrir a cdigo ensamblador. Debe dar
especialmente facilidad para controlar los dispositivos la
planificacin de procesos y recursos. Se debe poder expresar
fcilmente cuando se debe ejecutar una tarea particular y como
obtener el control de los recursos
Pgina 7
2.4. Portabilidad
La portabilidad es deseable en todas las aplicaciones porque
permite ejecutar el mismo cdigo en distintas mquinas.
Normalmente es posible utilizar un programa en cdigo fuente
escrito para una mquina en otra. Sin embargo existen todava
problemas cuando las mquinas tienen distinto tamao de
palabra y sobre todo en cuanto a la precisin en que se
representan los nmeros.
Para evitar estos problemas se deben evitar ambigedades para
que no se interpreten de distinta forma por el compilador de
una mquina que de otra. Y por otro lado se crean comits que
orientan a los escritores de compiladores sobre que deben
hacer
cuando
se
detecten
ambigedades
en
las
Pgina 8
Pgina 9
2.5. Simplicidad
La simplicidad contribuye a la seguridad, portabilidad, reduce
el costo y reduce la probabilidad de errores por una mala
interpretacin de las caractersticas del lenguaje.
Por otro lado si el lenguaje es complejo todas las caractersticas
se tienen que soportar en todas las implementaciones y
entonces suceder que se tendr un lenguaje con pocas
facilidades, duro y austero; o bien en el caso que se quieran
cubrir todas las necesidades que demanden los usuarios
entonces se tendr un lenguaje con mucha variedad y se tendr
que construir un compilador complejo que difcilmente
conducir a cdigos objetos eficientes.
Ada ha intentado evitar ambos problemas definiendo un
conjunto bsico de caractersticas y varios anexos. Cada
compilador de Ada 9X debe soportar las caractersticas bsicas
pero los anexos son opcionales. Si algn anexo se soporta debe
soportarse completamente. De esta forma se conocen todas las
posibilidades de un compilador conociendo los anexos que
soporta.
Pgina 10
2.6. Modularidad
La modularidad es esencial, ya que hoy da los programas son
extensos y habitualmente se desarrollan por equipos, por lo que
los programas deben poder descomponerse en mdulos.
Los mdulos deben especificarse mediante la definicin clara
de sus entradas y salidas as como de la funcin que realizan.
Para una buena modularidad es importante que el lenguaje
soporte informacin oculta, es decir que lo que suceda en el
interior de un mdulo sea invisible externamente (por ejemplo
las variables).
Debe
ser
posible
compilar
depurar
los
mdulos
Pgina 11
2.7. Eficacia
En los sistemas de tiempo real se debe tener un rendimiento
garantizado y adems se deben cumplir las restricciones de
tiempo.
Se debe poner nfasis en la codificacin en trminos de tamao
de cdigo y velocidad de operacin. En los primeros tiempos
slo se poda conseguir ambos requisitos utilizando lenguajes
ensambladores. Actualmente con la cada del precio del
hardware y el aumento en la velocidad han hecho que la
eficacia del lenguaje no solo se mida atendiendo a lo compacto
del cdigo y la velocidad.
La eficiencia de una aplicacin no slo depender del lenguaje
sino que adems depender del compilador y de las libreras de
run-time.
En lo que s influir directamente la eficacia del lenguaje ser
en que se cumplan los requisitos de tiempo. El lenguaje debe
permitir el anlisis para la planificacin, es decir, en un
programa de tiempo real se debe poder analizar que se
cumplirn todos los "deadline" de las tareas.
Pgina 12
Pgina 13
3. Tipificacin de datos.[Krishna,97]
Cuando
un
programador
define
una
variable
como
Do 100 i = 1.50
j=j+i
100 continue
Lo que el programador escribi
Pgina 14
Pgina 15
Tipos derivados
Los lenguajes actuales permiten que el programador construya
sus propios tipos de datos para aumentar la seguridad. Por
ejemplo en Ada se puede tener:
type PRESION is new float;
type TEMPERATURA is new float;
p1, p2, p3 : PRESION;
t1, t2 : TEMPERATURA;
Subtipos
Es til poder definir el rango de las variables. Por ejemplo si se
estn representando la altura de un avin
y tenemos una
Pgina 16
Pgina 17
Pgina 18
Matrices (Array)
La nocin de tipos se puede aplicar tambin a los arrays
type enterosimple is integer range 0..20;
type a1 is array(1..30) of enterosimple;
Registros
Un registro es un tipo de dato que permite agrupar diferentes
tipos de datos
type STRING is array(<>) of character;
type nombre_tipo is STRING(40);
type promedio_notas_tipo is float range 0.0..10.0;
type estudiante is
record
nombre: nombre_tipo;
promedio_notas: promedio_notas_tipo;
end record;
Pgina 19
Pgina 20
Punteros
Los punteros son el mecanismo utilizado por la mayora de los
lenguajes para permitir el direccionamiento indirecto. Es decir
para localizar una posicin de memoria se lee previamente otra
posicin de memoria que contiene la direccin de la primera.
Este mecanismo permite:
Referencia indirecta a variables. Por ejemplo permite crear listas
enlazadas.
Para ceder el flujo del control del programa a la direccin que indica
el puntero.
Pgina 21
4. Estructuras de control
Las estructuras de control permiten controlar el flujo del
programa. Todos los lenguajes tienen estructuras de decisin
como if-then-else, for, while, etc.
Pgina 22
Pgina 23
case i is
when -5 =>y:=x;
when others => y:=0;
end case
Pgina 24
5. Descomposicin en mdulos
Como ya se coment al comienzo del capitulo, una de las
caractersticas deseables en un lenguaje es la modularidad. Las
ayudas a la modularidad en los lenguajes suelen ser la
descomposicin en: bloques, procedimientos, funciones y
paquetes (packages). Veamos las diferencias entre ellos:
Bloques
Los bloques tienen dos partes: unas especificaciones que
definen las variables que se van a utilizar en el bloque, y el
cuerpo que contienen las sentencias que se deben ejecutar.
El propsito de los bloques es poder tener informacin oculta,
es decir las variables declaradas dentro del bloque no pueden
ser accesibles desde el exterior. Al salir del bloque la zona de
memoria que ocupaban esas variables se libera. Por otro lado
las variables se pueden redefinir dentro del bloque y no afecta
al exterior. Supongamos el siguiente pseudocdigo:
Pgina 25
Procedimientos y funciones
El inconveniente que presentan los bloques es que el cdigo se
debe repetir cada vez que se quiera utilizar el bloque. Los
procedimientos y funciones, sin embargo, solo se escriben una
vez y se referencian cada vez que se necesiten. Otra ventaja de
la utilizacin de procedimientos y funciones es que el cdigo
se puede descomponer jerrquicamente.
Paquetes (packages)
Los paquetes suponen un paso ms en lo que se refiere a
modularidad.
Pgina 26
paquetes
pueden
escribirse,
depurarse
compilarse
independientemente.
Los paquetes se pueden incluir en libreras para que puedan utilizarse
por cualquier programador.
Los paquetes mejoran la seguridad. Puesto que el cdigo interno del
paquete no puede ser accesible la exterior, los errores exteriores no
pueden afectar al paquete.
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba
Pgina 27
Cuerpo
package body COMPLEX_ALGEBRA is
with ROOTS; use ROOTS;
with TRIGONOMETRY; use TRIGONOMETRY ;
function ADD (A, B: COMPLEX) return COMPLEX is
begin
return ( (A.REAL_PART+B . REAL.PART) ,
(A.IMAGINARY_PART+B.IMAGINARY_PART) ) ;
end ADD ;
function SUBTRACT(A, B: COMPLEX) return COMPLEX is
begin
return ( (A.REAL_PART-B.REAL_PART) ,
(A.IMAGINARY_PART-B.IMAGINARY_PART) ) ;
end SUBTRACT;
function MULTIPLY( A, B: COMPLEX) return COMPLEX is
begin
return ( (A.REAL_PART*B.REAL_PARTA.IMAGINARY_PART* B.IMAGINARY_PART) ,
(A. IMAGINARY_PART *B. REAL_PART +
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba
Pgina 28
Este paquete puede ser incluido en una librera de Ada, de forma que
cualquiera puede utilizar el tipo COMPLEX y las funciones
asociadas ADD, SUBTRACT, y MULTIPLY:
with COMPLEX_ALGEBRA ;
procedure ABCD is
use COMPLEX_ALGEBRA;
A : COMPLEX:= (1,2);
B : COMPLEX:= (3,4);
C: COMPLEX;
begin
A:= ADD(A,B) ;
C:= MULTIPLY(A,B) ;
end;
Pgina 29
Pgina 30
Pgina 31
try
{
// sentencias en las que pueden producirse excepciones
}
catch (nombre_excepcin){
// manejador
}
Pgina 32
la
ausencia
de
manejadores,
requieren
que
el
Pgina 33
Pgina 34
Pgina 35
Modelo de reanudacin
Para estudiar este modelo supongamos tres procedimientos Q,
P y R. El procedimiento P llama a Q y
Q llama a R
Pgina 36
Pgina 37
Pgina 38
Pgina 39
Pgina 40
Pgina 41
Ejemplos:
declare
type gpa is delta 0.01 range 0.00..4.00;
begin
gpa := calc_gpa (student) ;
exception when CONSTRAINT_ERROR => put ( "gpa is in error: it is
out of range" ) ;
end;
Pgina 42
declare
x,y, z : float;
begin
get(x); get(y) ;
z : = x/y;
exception
when NUMERIC_ERROR =>
put ("Numeric Error : Possibly an attempt to divide by zero") ;
return O ;
end
Pgina 43
Pgina 44
Compilador
Traduce el cdigo fuente a lenguaje mquina.
Un buen compilador debera tener excelentes posibilidades de
diagnstico para aumentar la eficacia durante el proceso de
depuracin.
El compilador debera tambin generar un listado de las
instrucciones mquina en las que ha traducido el programa
para poder hacer por ejemplo, estimaciones de tiempo.
Sistemas Informticos de Tiempo Real
A.T.C. Universidad de Crdoba
Pgina 45
Pgina 46
Kernel
El kernel es el responsable de los recursos del sistema. Incluye
rutinas para situar y planificar tareas, manejo de memoria,
algoritmos para la comunicacin entre procesadores, manejo de
los fallos en los procesadores y se encarga de las operaciones
de entrada salida.
Pgina 47