task body MESSEN is
-- Typdeklarationen
type BIT_T is (OFF, ON);
for BIT_T use (OFF => 0; ON => 1);
for BIT_T'SIZE use 1;
type LEER_T is array(1..7) of BIT_T;
for LEER_T'SIZE use 7;
type REGISTER_T is record
WERT : WERT_T;
GUELTIG : BIT_T;
LEER : LEER_T;
end record;
for REGISTER_T use record
WERT at 0 range 0..7;
GUELTIG at 0 range 8..8;
LEER at 0 range 9..15;;
end record;
for REGISTER_TīSIZE use 16;
pragma PACK(REGISTER_T);
-- Variablendeklarationen
REGISTER: REGISTER_T;
pragma VOLATILE(REGISTER);
for REGISTER use at 8#777700#;
TMP_REG: REGISTER_T;
pragma VOLATILE(REGISTER);
TMP_WERT: WERT_T
begin
loop
select
accept FUELLSTAND(WERT: out WERT_T) do
WERT := TMP_WERT;
end FUELLSTAND;
else
-- hier polling, ginge auch eleganter
TMP_REG:=REGISTER;
if TMP_REG.GUELTIG=OFF then
TMP_WERT:=TMP_REG.WERT;
end if;
end select;
end loop;
exception
when CONSTRAINT_ERROR => Fehlerbehandlung;
end MESSEN;