From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Simon Clubley Newsgroups: comp.lang.ada Subject: Re: Cleanest Ada way to do this? Date: Sun, 22 Jun 2014 19:07:32 +0000 (UTC) Organization: A noiseless patient Spider Message-ID: References: <7eaee5fc-2045-4bb3-8b16-d757b54760da@googlegroups.com> Injection-Date: Sun, 22 Jun 2014 19:07:32 +0000 (UTC) Injection-Info: mx05.eternal-september.org; posting-host="e458ff8b81bc0c159989eb0e36c6e372"; logging-data="12188"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/GJj7d8KKcFICy9dSRMgaN/x30OlmIBhE=" User-Agent: slrn/0.9.8.1 (VMS/Multinet) Cancel-Lock: sha1:TXztU0JgfuOei970rN72xBFlaPo= Xref: news.eternal-september.org comp.lang.ada:20522 Date: 2014-06-22T19:07:32+00:00 List-Id: On 2014-06-22, Mike Silva wrote: > I'd like some help on the cleanest, or most elegant, way to do this in Ada. > I'm writing to an LCD character display, in 4-bit mode, which requires writing > an 8 bit character or command value as two 4 bit pieces. The port (a memory > address) being written to is 32 bits wide. What I would like to be able to do > is some form of this (not valid Ada, I know): > > Port32(4..7) := Some_Char(4..7); > ..twiddle some other control bits.. > Port32(4..7) := Some_Char(0..3); > ..twiddle some other control bits.. > Do the other bits in Port32 need to be preserved when (4..7) are written ? Is it _required_ that Port32 is written in units of 32 bits ? (The answer to that is probably yes, but I thought I would check). There was some discussion of this class of problem a few weeks ago when I was proposing syntax to allow the atomic update of multiple bitfields at the same time without having to use an intermediate variables. The conclusions from that were that if you need to preserve the other bits in Port32(4..7) your only real option is to use a temporary variable with a 32-bit record structure to match your bitfield requirements (unless you want to get into using C style bitmasks.) Pragma Atomic and/or Pragma Volatile may also need to be applied. Simon. -- Simon Clubley, clubley@remove_me.eisner.decus.org-Earth.UFP Microsoft: Bringing you 1980s technology to a 21st century world