From: DrPi <314@drpi.fr>
Subject: Re: Record initialisation question
Date: Mon, 11 Jan 2021 18:46:34 +0100 [thread overview]
Message-ID: <5ffc8efd$0$8957$426a74cc@news.free.fr> (raw)
In-Reply-To: <i61cimFet7qU1@mid.individual.net>
Le 10/01/2021 à 23:14, Niklas Holsti a écrit :
> On 2021-01-10 23:27, DrPi wrote:
>> Le 10/01/2021 à 20:30, Niklas Holsti a écrit :
>>> On 2021-01-10 18:53, DrPi wrote:
>>>> Le 09/01/2021 à 16:44, Niklas Holsti a écrit :
>>> ...
>>>>>
>>>>> Do you expect the compiler/linker to generate the full value of the
>>>>> Dcd object into the program image at compilation and link time?
>>>> That's it.
>>>>
>>>>> Have you ensured that the construction of the Dcd object requires
>>>>> no elaboration code? Most Flash memories cannot be written in the
>>>>> same way as RAM, so even if that .txt section is not
>>>>> write-protected, normal RAM-oriented elaboration code would not be
>>>>> able to write into Flash.
>>>> I'm aware of this (I'm an electronics guy).
>>>> I'll add a "pragma No_Elaboration_Code_All;" when I'm ready.
>>>
>>>
>>> Better add it now, because if you add it later, the compiler may then
>>> complain that it cannot implement the Dcd aggregate without
>>> elaboration code, and you will have to work around that somehow.
>>>
>>> A good while ago, a colleague had a problem where a large constant
>>> array aggregate would require elaboration code if written in named
>>> form (Index => Value, Index => Value, ...), and it was necessary to
>>> write it in positional form (Value, Value, ...) to get rid of the
>>> elaboration code. It can be tricky, so it is better to be warned
>>> early of any problems.
>> Thanks for letting me know.
>> Any reason why the behavior changes with the way of writing ?
>
>
> Not really. We asked the compiler vendor (not AdaCore) for help, and
> they advised us to use the positional form, without further explanation.
> I assume the compiler writer just did not bother to implement the
> index-sorting step that would be needed for the named form, and
> preferred to generate elaboration assignments "on the fly" in the order
> the indices appeared in the named aggregate.
>
> The point is that compilers are not required to make all things work
> without elaboration code. Just as for record representation clauses,
> compilers are only required to reject the program if the compiler cannot
> (or does not bother to) implement the request. So you seldom know if
> your request will work, until you try it with your particular compiler.
>
> I am reminded of a similar problem I had (this time with GNAT) more
> recently: I wanted to write start-up code to initialize the DRAM
> controller, but of course this code should normally not use the DRAM,
> only registers. I had nice record types for the DRAM controller
> registers, but any use of record aggregates on the right-hand side of
> assignments made GNAT use temporaries in the stack (thus in DRAM). Only
> for an assignment of a literal constant would GNAT build the constant in
> registers, avoiding DRAM use. (In the end I used the record aggregates,
> because I knew that the DRAM controller would have some working initial
> state left over from the boot SW, and I only needed to modify this state
> a little.)
>
Thanks, that's interresting.
I added "pragma No_Elaboration_Code_All;" to my code and... all records
are rejected.
The boot data structure (in FLASH memory) is composed of several
records. They are linked by their addresses. When a record contains an
address, initializing it with a "non static number" value makes the
compiler complain (with No_Elaboration_Code_All set).
You were right.
I have to find a workaround.
next prev parent reply other threads:[~2021-01-11 17:46 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-09 9:30 Record initialisation question DrPi
2021-01-09 10:46 ` Dmitry A. Kazakov
2021-01-10 16:41 ` DrPi
2021-01-11 21:48 ` Shark8
2021-01-12 11:38 ` Simon Wright
2021-01-12 15:01 ` Shark8
2021-01-14 21:32 ` Simon Wright
2021-01-14 23:12 ` Shark8
2021-01-14 12:58 ` DrPi
2021-01-17 17:03 ` DrPi
2021-01-17 23:55 ` Shark8
2021-01-18 20:02 ` DrPi
2021-01-19 5:50 ` Randy Brukardt
2021-01-09 15:44 ` Niklas Holsti
2021-01-10 16:53 ` DrPi
2021-01-10 19:30 ` Niklas Holsti
2021-01-10 21:27 ` DrPi
2021-01-10 22:14 ` Niklas Holsti
2021-01-11 17:46 ` DrPi [this message]
2021-01-11 20:58 ` Niklas Holsti
2021-01-14 13:07 ` DrPi
2021-01-14 13:36 ` AdaMagica
2021-01-14 14:07 ` Jeffrey R. Carter
2021-01-14 14:09 ` Jeffrey R. Carter
2021-01-14 14:27 ` Niklas Holsti
2021-01-14 16:53 ` Shark8
2021-01-15 7:50 ` DrPi
2021-01-15 18:15 ` Shark8
2021-01-16 10:28 ` DrPi
2021-01-14 16:59 ` Paul Rubin
2021-01-15 7:49 ` DrPi
2021-01-17 17:08 ` DrPi
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox