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

    #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


Reply via email to