what I would check here (just a live tought process)
* check that the ld file is actually used (ld file is pointed by main
Make.defs IIRC) (easy: just add garbage in it and verify build actually
breaks)
* check that the driver source with the definition is being recompiled
* check that the object file that contains the isram based definition
actually shows the use of the new section
* make distclean, restart with a fresh build tree, rebuild all
* reboot machine if possible (im not joking)
Seems obvious, but sometimes bugs are hiding where we're assuming
they're not
Sebastien
Le 08/06/2021 à 15:12, Tim Hardisty a écrit :
Thanks, but still no cigar :(
I have tried:
.isramdata_reserve (NOLOAD) :
{
*(.isramdata)
. = ALIGN(4);
_isramdata_heap_start = ABSOLUTE(.);
} > isram
and also just
.isramdata(NOLOAD) :
{
*(.isramdata)
} > isram
along with trying
staticuint32_tg_mcan0_msgram[MCAN0_MSGRAM_WORDS]
aligned_data(MCAN_ALIGN) locate_data(".isramdata");
where MCAN_ALIGN is ARMV7A_DCACHE_LINESIZE, which is 32
or
static uint32_t g_mcan0_msgram[MCAN0_MSGRAM_WORDS] __attribute__
((section (".isramdata")));
and all methods still report this as in SDRAM not ISRAM
On 08/06/2021 13:33, David Sidrane wrote:
Here is a working example.
https://github.com/apache/incubator-nuttx/blob/master/arch/arm/src/stm32h7/stm32_spi.c#L715-L716
https://github.com/apache/incubator-nuttx/blob/master/boards/arm/stm32h7/nucleo-h743zi/scripts/flash.ld#L179-L184
You can check it the arm-none-eabi-nm -C nuttx.elf | grep g_mcan0_msgram
David
-----Original Message-----
From: Tim Hardisty [mailto:[email protected]]
Sent: Tuesday, June 08, 2021 4:23 AM
To: [email protected]
Subject: Re: Memory locations
On 07/06/2021 19:06, Nathan Hartman wrote:
On Mon, Jun 7, 2021 at 12:24 PM Tim wrote:
I will, I believe, need to declare - place - MCAN related
structures such
that they (or at least some elements of them) are in SRAM.
Yes. It is possible. It is done by adding attributes in the code which
tell the compiler that an object should be located at a particular
address or section.
I have added this to my linker script (and other variations on that
theme, all of which compile OK with no warnings or errors)
.isramdata :
{
} > isram
and declared
static uint32_tg_mcan0_msgram[MCAN0_MSGRAM_WORDS]
__attribute__((section(".isramdata"))) = {0};
But it does not place the array in isram :(
system.map states: 20053fc4 D g_mcan0_msgram
which is confirmed by the debugger and an info debug message
Is there anything overruling this? Or a silly mistake, given my
inexperience with linker scripts?
Any guidance much appreciated!