Fotis, you define many symbols(e.g. __gp_ram?_bss_start__) in your linker
script. My question is how the common init code knows the number of these
symbols?

On Fri, Mar 26, 2021 at 9:46 AM Fotis Panagiotopoulos <f.j.pa...@gmail.com>
wrote:

> Oh, sorry.
> Attached again as .txt. Is it OK now?
>
> > A tool that takes the Kconfig + chip+ memorymap and make a linker include
> > file and the config code for the heap may be the way to go.
>
> I am pretty sure that a "tool" will not be able to cover all use cases.
> Over the years I had to make custom scripts to account for:
> * Bootloaders
> * Binary blops
> * Firmware headers
> * ROM files
> * DMA buffers
> * External memories
>  etc etc..
>
> Do you believe that a tool can be made that can handle everything?
>
>
> Στις Παρ, 26 Μαρ 2021 στις 6:37 μ.μ., ο/η David Sidrane <
> david.sidr...@nscdg.com> έγραψε:
>
>> I am just thinking out load...
>>
>> I agree this has to come from one place. But I do think it is just the
>> linker file.
>>
>> Currently we have
>> The arch memroymap h files have the base addresses, sizes  - This is the
>> Reference manuals counterpart, it covers all the sub members of the chips)
>> The chip.h files  that has sizes  - This is the Data Sheet counterpart, it
>> covers one or more of the sub members of the chips)
>> The Kconfig - More flexible from a users stand point.
>> The heap c files - buried semantics - not good
>> linker file - the boards usage specific.
>>
>> I like using the linker file, but Kconfig is build time - no file
>> modification
>>
>> Just moving things to the linker file does not fix the ordering or adding
>> issues. (it is link time not compile time)
>>
>> A tool that takes the Kconfig + chip+ memorymap and make a linker include
>> file and the config code for the heap may be the way to go.
>>
>> David
>>
>>
>> -----Original Message-----
>> From: Fotis Panagiotopoulos [mailto:f.j.pa...@gmail.com]
>> Sent: Friday, March 26, 2021 9:17 AM
>> To: dev@nuttx.apache.org
>> Subject: Re: How to ensure HEAP will not overlap static DMA buffer?
>>
>> I face similar problems (with a different use case) on an STM32F4.
>> The thing is that although the linker script belongs to the board logic
>> and
>> thus it is freely customizable, the heap regions are hard-coded in the
>> arch
>> files.
>>
>> So, I started working on PR #2277 (
>> https://github.com/apache/incubator-nuttx/pull/2277), but unfortunately I
>> had to pause the development on this.
>> The idea is similar to what you describe here. Everything can be defined
>> in
>> the linkerscript (addresses, order, sizeses etc).
>>
>> I was thinking a lot of any alternatives on this. I came to the conclusion
>> that Kconfig is the wrong tool for this job.
>> You lose all compile-time (and CI) checks and can easily be misconfigured.
>> I am also afraid that we will end up with a few dozen "hacks" like above
>> or
>> like STM32_CCMEXCLUDE (I never liked this option....).
>> And no matter what you do, you will never be able to satisfy any crazy
>> memory mappings that any project may need.
>>
>> A similar issue to this is Issue #2001 (
>> https://github.com/apache/incubator-nuttx/issues/2001).
>> This was my first crash while trying out NuttX :)
>> In short, there is the assumption that the main stack will always reside
>> between BSS and Heap, again being very restrictive.
>>
>>
>> Στις Παρ, 26 Μαρ 2021 στις 5:46 μ.μ., ο/η Nathan Hartman <
>> hartman.nat...@gmail.com> έγραψε:
>>
>> > On Fri, Mar 26, 2021 at 11:41 AM Gregory Nutt <spudan...@gmail.com>
>> wrote:
>> >
>> > > Missing bit of logic:
>> > >
>> > > >> Speaking of the linker, is there a way to use a combination of the
>> > > >> linker script and __attribute__ incantations in the code to detect
>> > > >> automatically the size that g_sram4_reserve should be and entirely
>> > > >> eliminate the need for the user to specify the start and end of
>> each
>> > > >> region in Kconfig?
>> > > >
>> > > > Are you thinking of something like this in the linker script:
>> > > >
>> > > >     .sram4_reserve :
>> > > >     {
>> > > >       _sram4_reserve_begin = ABSOLUTE(.);
>> > > >       *(.sram4)
>> > > >       _sram4_reserve_end = ABSOLUTE(.);
>> > > >     }
>> > > >
>> > > > And in the C code:
>> > > >
>> > > We need to lie to C and tell it what to think those symbols are:
>> > >
>> > >     EXTERN const uint32_t _sram4_reserve_begin
>> > >     EXTERN const uint32_t _sram4_reserve_begin
>> >
>> >
>> >
>> > Ah, yes, otherwise those symbols would be undefined. Later the linker
>> will
>> > resolve them to the correct addresses.
>> >
>> >
>> > >     #define SRAM4_RESERVE_BEGIN &_sram4_reserve_begin
>> > > >     #define SRAM4_RESERVE_END &_sram4_reserve_end
>> > > >
>> > > > The implied size depends on the size of all .sram4 sections.  I
>> assume
>> > > > this would be positioned at the beginning of SRAM4 and the size of
>> the
>> > > > region that could be added to the heap would be SRAM4_RESERVE_END
>> > > > through SRAM_END.
>> > > >
>> > > You can see this same kind of thing in, for example,
>> > > arch/arm/src/common/arm_internal.h
>> >
>> >
>> >
>> > Great! Thanks
>> >
>> > Nathan
>> >
>>
>

Reply via email to