From: "Nick Roberts" <nick.roberts@acm.org>
Subject: Re: Bitordering? was Re: Bitmanipulation in Ada
Date: Sat, 21 Aug 2004 12:34:46 +0100
Date: 2004-08-21T12:34:46+01:00 [thread overview]
Message-ID: <opsc2yf8zvp4pfvb@bram-2> (raw)
In-Reply-To: 412665C4.E52A7590@alfred-hilscher.de
On Fri, 20 Aug 2004 22:57:40 +0200, Alfred Hilscher
<SPAM@alfred-hilscher.de> wrote:
> When I declare an boolean array with eight elements 1..8 (e.g. to
> address a hardware port with eight status bits), how are they
> ordered is X(1) the msb or the lsb of the byte?
It is undefined.
The typical way to deal with this kind of situation is to use a
record type with a record representation clause. For example:
type Frobnosticator_Status is
record
Ready, Complete, Motor_On, Fault, Power_Low: Boolean;
end record;
for Frobnosticator_Status'Bit_Order use System.Low_Order_First;
for Frobnosticator_Status use
record
Ready at 0 range 0..0;
Complete at 0 range 1..1;
Motor_On at 0 range 3..3;
Fault at 0 range 6..6;
Power_Low at 0 range 7..7;
end record;
for Frobnosticator_Status'Size use 8;
This lot specifies exactly where each bit is, and what it means.
In this example, I've used representation clauses to tell the
compiler to consider the LSB to be bit number 0 for this record,
and to tell it that the record is 8 bits in size. I've associated
a specific bit with each Boolean component (bits 2, 4, and 5 are
unused).
If I declare:
Status: Frobnosticator_Status;
for Status'Address use Frob_1_Status_Address;
pragma Volatile(Status);
to map the variable 'Status' to frobnosticator number 1's status
port, I can read off its status bits by name:
if Status.Fault then
Put_Line( Current_Error, "Frob #1 went down" );
raise Hardware_Failure;
end if;
...
Does this help you?
--
Nick Roberts
next prev parent reply other threads:[~2004-08-21 11:34 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-18 20:37 Bitmanipulation in Ada Bernd Specht
2004-08-18 20:51 ` Ludovic Brenta
2004-08-18 21:10 ` Bernd Specht
2004-08-18 21:16 ` Ludovic Brenta
2004-08-18 21:18 ` Ed Falis
2004-08-19 17:30 ` Bernd Specht
2004-08-19 17:44 ` Ed Falis
2004-08-19 0:53 ` Jeffrey Carter
2004-08-19 17:44 ` Bernd Specht
2004-08-19 18:09 ` Martin Dowie
2004-08-19 18:28 ` Bernd Specht
2004-08-19 19:31 ` Martin Dowie
2004-08-19 20:29 ` Martin Dowie
2004-08-20 21:31 ` Bernd Specht
2004-08-19 19:17 ` Jeffrey Carter
2004-08-19 19:57 ` Björn Persson
2004-08-20 0:52 ` Jeffrey Carter
2004-08-19 21:24 ` Francois G. Dorais
2004-08-20 8:55 ` Pascal Obry
2004-08-20 7:26 ` Jean-Pierre Rosen
2004-08-20 21:20 ` Bernd Specht
2004-08-20 21:39 ` Ed Falis
2004-08-18 21:14 ` (see below)
2004-08-18 21:56 ` Martin Dowie
2004-08-19 15:25 ` (see below)
2004-08-19 15:50 ` Martin Dowie
2004-08-18 21:53 ` Martin Dowie
2004-08-18 22:59 ` Björn Persson
2004-08-19 8:08 ` Egil H. H�vik
2004-08-19 17:46 ` Bernd Specht
2004-08-20 20:57 ` Bitordering? was " Alfred Hilscher
2004-08-21 11:34 ` Nick Roberts [this message]
2004-08-21 14:00 ` Jim Rogers
2004-08-21 16:54 ` Simon Wright
2004-08-21 16:55 ` Georg Bauhaus
2004-08-23 18:36 ` Alfred Hilscher
2004-08-23 18:47 ` Alfred Hilscher
2004-08-23 22:39 ` Nick Roberts
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox