Hello,
Of course we are aware of the different flash bank sizes and it is actually not that uncommon. But it is also nothing the toolchain has to worry about. This is handled by our J-Link flash loaders and in your case also seems to be working otherwise the download and debug session start would already fail. Which is not the case here.
All you have to do is supply a valid memory map that describes the complete memory blocks as one unit. So the correct memory map for your device is this:
<!DOCTYPE Board_Memory_Definition_File>
<root name="STM32F411VETx">
<MemorySegment name="FLASH1" start="0x08000000" size="0x00080000" access="ReadOnly" />
<MemorySegment name="RAM1" start="0x20000000" size="0x00020000" access="Read/Write" />
</root>
And nothing else!
Everything else regarding placement is done via the linker or your code, depending on how you are placing the variable.
Attached you can find a simple example project for your device that places a const string at a specific location in Flash.
This can be of course done with any symbol.
Also you seem to be trying to place data at Flash offset 0. While from Linker side you can of course do so, your Cortex-M will never boot as Cortex-M requires a vector table at that location which at least points to the Reset_Handler address and contains the stack pointer. That is why explicit placement on offset 0 does not work with the default linker script generated by ES because you have this line in your linker script to accommodate this:
place at start of FLASH { block vectors }; // Vector table section
If you change that line to
place in FLASH { block vectors }; // Vector table section
And do an explicit placement of your symbol to 0, then it will be placed there. But again, if that data does not contain the vector table your device will not start.
For more information about the SEGGER Linker see here:
https://www.segger.com/doc/UM20005_Linker.html
Best regards,
Nino