comp.lang.ada
 help / color / mirror / Atom feed
From: Stuart Palin <stuart.palin@baesystems.com>
Subject: Re: Help with Atomic_Components and whole array assignment
Date: Mon, 22 Jan 2001 12:51:41 +0000
Date: 2001-01-22T12:51:41+00:00	[thread overview]
Message-ID: <3A6C2CDD.67FD79DC@baesystems.com> (raw)
In-Reply-To: 94h55t$9a1$1@nnrp1.deja.com

r_c_chapman@my-deja.com wrote:

Hi Rod!

> Having a slight confusion over the use of array aggregate assignments
> with Atomic_Components.
> 
> We have a device which _has_ to be accessed use byte-wide load
> and store instructions only (it's an autostore NOVRAM...), so we
> have an array of bytes declared, thus:
> 
>   type Byte is range 0 .. 255;
>   for Byte'Size use 8;
>   for Byte'Alignment use 1;
>   type Index is range 0 .. 4; -- for argument's sake!
>   type Byte_Array is array (Index) of Byte;
>   pragma Volatile (Byte_Array);
>   pragma Atomic_Components (Byte_Array);
> 
>   A : Byte_Array;
>   for A'Address use ...
> 
> all fine so far.  When we initialise this array, thus:
> 
>   A := Byte_Array'(others => 0);
> 
> compiler A generates 1 Word-sized store and 1 Byte-sized store.
> (Target is PowerPC by the way.)
> Compiler B (or should that be "G" :-) ) generates similar code on IA32.
> 
> Can anyone confirm this is indeed acceptable behaviour?

Yes it is (from a language specification point of view) - a deja news
search should throw up several discussions on the topic.

The pragma volatile has been observed, because the operation is on
object (not some locally cached version of it).

The pragma atomic_components has been observed because each component is
indivisibly updated (within the bounds of an architecture assumption
that the word write is not divisible).

--# hide;
Ultimate answer seems to be package MACHINE_CODE is the way to go if the
there is a specific way memory has to be accessed.

  The "portability" argument is that since this access mechanism is
specific to your
  architecture it should be re-examined if you change the hardware
anyway, so using
  MACHINE_CODE conveniently highlights the areas of software you should
look at.

Personally; this seems to be a recurrent embedded systems problem (that
is either
agonized over or [in]conveniently swept under the carpet).  It would be
nice if it were addressed at the next language revision.


--
Stuart Palin
Principal Software Engineer
BAE SYSTEMS Avionics Ltd, Rochester
G-NET 791 3364    mailto:stuart.palin@baesystems.com



  reply	other threads:[~2001-01-22 12:51 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-01-22 11:22 Help with Atomic_Components and whole array assignment r_c_chapman
2001-01-22 12:51 ` Stuart Palin [this message]
2001-01-22 14:16   ` mark_lundquist
2001-01-22 16:09     ` Pat Rogers
2001-01-22 16:29     ` Robert Dewar
2001-01-22 19:52       ` Mark Lundquist
2001-01-30 15:54       ` Tucker Taft
2001-01-30 18:20         ` Robert Dewar
2001-01-31  5:08           ` DuckE
2001-01-31  5:57             ` Robert Dewar
2001-02-01  3:31               ` DuckE
2001-02-02 21:38               ` Mark Lundquist
2001-02-02 23:08                 ` Robert Dewar
2001-02-03  1:39                 ` tmoran
2001-01-22 16:21 ` Robert Dewar
2001-01-22 16:39   ` r_c_chapman
2001-01-30 15:57     ` Tucker Taft
2001-01-30 18:26       ` Robert Dewar
2001-01-30 21:30         ` Simon Wright
2001-02-01  6:11           ` Robert Dewar
2001-02-06  0:32         ` Richard Kenner
2001-02-06  3:15           ` Robert Dewar
2001-01-31 10:09       ` Rod Chapman
2001-01-31 21:41         ` Tucker Taft
2001-02-01  5:33           ` Robert Dewar
2001-02-01  9:42           ` Rod Chapman
2001-02-01 18:10             ` Robert Dewar
2001-02-01 13:14           ` SPARK flow analysis (was Help with Atomic_Components and whole array assignment) Stuart Palin
2001-02-01 23:38           ` Help with Atomic_Components and whole array assignment Nick Roberts
2001-02-02  3:45             ` Robert Dewar
2001-02-07 21:40           ` Nick Williams
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox