ADA - un par de dudas

 
Vista:

un par de dudas

Publicado por pablo (1 intervención) el 17/09/2007 15:53:57
Hola tengo dos dudas, a ver si alguien me puede ayudar:

1ª) estoy haciendo una practica en la que me piden crear un nuevo tipo de datos Byte, que represente enteros de 8 bits sin signo, que irá en un paquete junto con dos funciones para leer y escribir este tipo de datos en dos posiciones concretas de memoria 7F00 y 7F02 mediante dos procedimientos Leer() y Escribir(). El problema que tengo es que no se como implementar estos dos procedimientos, ¿Como hago la referencia a memoria?

2ª)Mi segunda duda es mas bien teoriaca, a la hora de implementar una actividad cíclica ¿como se hace?¿podeis ponerme un ejemplo de codigo?

Muchas gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación de un nuevo tipo de datos Byte y actividades cíclicas

Publicado por Alejandro (155 intervenciones) el 30/06/2023 19:55:12
1ª) Para implementar los procedimientos Leer() y Escribir() que acceden a posiciones concretas de memoria, puedes utilizar el concepto de "punteros" en Ada. Un puntero es una variable que almacena la dirección de memoria de otro objeto. Aquí tienes un ejemplo de cómo podrías implementar los procedimientos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
with System.Storage_Elements; -- Para acceder a los tipos de datos de almacenamiento
 
package Nuevo_Tipo is
 
   subtype Byte is System.Storage_Elements.Word_8; -- Define el nuevo tipo de datos Byte como un Word_8 de 8 bits sin signo
 
   procedure Escribir(Direccion: in System.Storage_Elements.Address; Valor: in Byte);
   procedure Leer(Direccion: in System.Storage_Elements.Address; Valor: out Byte);
 
end Nuevo_Tipo;
 
package body Nuevo_Tipo is
 
   procedure Escribir(Direccion: in System.Storage_Elements.Address; Valor: in Byte) is
      Puntero : System.Address := System.Storage_Elements.To_Address(Direccion); -- Convierte la dirección a un puntero
   begin
      Byte'Write(Puntero, Valor)'; -- Escribe el valor en la posición de memoria correspondiente
   end Escribir;
 
   procedure Leer(Direccion: in System.Storage_Elements.Address; Valor: out Byte) is
      Puntero : System.Address := System.Storage_Elements.To_Address(Direccion); -- Convierte la dirección a un puntero
   begin
      Byte'Read(Puntero, Valor)'; -- Lee el valor de la posición de memoria correspondiente
   end Leer;
 
end Nuevo_Tipo;

2ª) Para implementar una actividad cíclica en Ada, puedes utilizar el concepto de "tareas". Una tarea en Ada es una secuencia de instrucciones concurrente que se ejecuta de forma independiente. Aquí tienes un ejemplo de cómo podrías implementar una actividad cíclica utilizando tareas:

1
2
3
4
5
6
7
8
9
10
11
task Actividad_Ciclica is
   pragma Priority(10); -- Prioridad de la tarea (opcional)
   pragma Period(100); -- Período de ejecución de la tarea en milisegundos (opcional)
begin
   loop
      -- Código de la actividad cíclica aquí
      -- Esta sección se ejecutará periódicamente según el período especificado
 
      delay until Clock + 100; -- Retraso para cumplir con el período de ejecución
   end loop;
end Actividad_Ciclica;

En este ejemplo, la tarea `Actividad_Ciclica` se ejecutará periódicamente cada 100 milisegundos. Puedes ajustar la prioridad y el período según tus necesidades.

Espero que estas respuestas te sean útiles para resolver tus dudas y avanzar en tu práctica. ¡Buena suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar