After updating KEIL from 4.23 to 4.71a I am no longer able to write to a specific address. Lines such as these:
static const int8u s_software_version_rev_string[VERSION_NUMBER_LENGTH] __attribute__((section(".ARM.__AT_0x00031024") ) ) = "XXXXXXXXX"; static const int8u s_software_version_date_string[16] __attribute__( (at(APPLICATION_TOKEN_ADDR+0x30) ) ) =__DATE__;
Give these errors: ..\bin\IAPP.axf: Error: L6985E: Unable to automatically place AT section version.o(.ARM.__AT_0x00031024) with required base address 0x00031024. Please manually place in the scatter file using the --no_autoat option.
..\bin\IAPP.axf: Error: L6985E: Unable to automatically place AT section version.o(.ARM.__AT_0x00031034) with required base address 0x00031034. Please manually place in the scatter file using the --no_autoat option. IROM1 is specified from 0x0 to 0x80000 and IRAM1 is specified starting from 0x40000000.
Notes: Placing manually in scatter file gives overlapping errors, if I place the sections in IRAM sections it will work, but I need to place in IROM @ specific addresses. Only thing changed was version of KEIL.
Anyone have any ideas? Am I missing something? Thanks for the help!
What do you mean by preprocessed only example?
The values don't overlap because even if I just place 1 variable into memory it gives the same error, and before I updated KEIL it worked fine. As for the case-sensitivity of the AT, both ways gives the same result I do not believe it is case sensitive.
It has something to do with the scatter file I think. Right now for IROM I have 2 ER's within an LR that looks like this:
LR_IROM1 0x10000 0x6DFFFF { ; load region size_region ER_IROM1 +0 0x1000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } ER_IROM2 +0 0x55EA8{ .ANY (+RO) }
This DOES WORK in KEIL 4.23, but not in 4.71a. Was there a major change in scatter-loading or specific memory placement inbetween those versions? Thanks!!!