Thank you so much Sebastian. I am attaching the .LCF file below. Please go through it.
MEMORY
{
# Temporarily granted more space for user app
#vectorrom (RX): ORIGIN = 0x00083000, LENGTH = 0x00000400
#cfmprotrom (RX): ORIGIN = 0x00083400, LENGTH = 0x00000020
#rom (RX): ORIGIN = 0x00083420, LENGTH = 0x0007CBE0 # Code + Const data
vectorrom (RX): ORIGIN = 0x0004B000, LENGTH = 0x00000400
cfmprotrom (RX): ORIGIN = 0x0004B400, LENGTH = 0x00000020
rom (RX): ORIGIN = 0x0004B420, LENGTH = 0x000B4BD0 # Code + Const data
fwver_mark (RW): ORIGIN = 0x000FFFF0, LENGTH = 0x00000008 # FW Ver marker
end_mark (RW): ORIGIN = 0x000FFFF8, LENGTH = 0x00000008 # FW End marker
ram (RW): ORIGIN = 0x1FFF0000, LENGTH = 0x00020000 # SRAM - RW data
#ext_ram (RW): ORIGIN = 0x60000000, LENGTH = 0x00080000 # External SRAM - RW Data
ext_ram (RW): ORIGIN = 0x60000000, LENGTH = 0x00060000 # External SRAM - RW Data
ext_ram_txt (RX): ORIGIN = 0x60060000, LENGTH = 0x00020000 # External SRAM - RX text
ext_flash (RW): ORIGIN = 0x70000000, LENGTH = 0x000A0000 # External Flash - RW Data
ext_flash_txt (RX): ORIGIN = 0x70080000, LENGTH = 0x00200000 # External Flash for txt - RX Data
# kernel space starts after RAM variables (Location of MQX Kernel data + MQX heap)
end_of_kd (RW): ORIGIN = 0x2000FFF0, LENGTH = 0x00000000
# Boot stack reused by MQX Kernel data
bstack (RW): ORIGIN = 0x2000FA00, LENGTH = 0x00000200 # Boot stack
end_bstack (RW): ORIGIN = 0x2000FC00, LENGTH = 0x00000000
}
KEEP_SECTION { .vectors_rom, .vectors_ram, .cfmconfig, .endmark , .fwvermark}
FORCE_ACTIVE {g_engString, g_engStringSize,
g_frenchString, g_frenchStringSize,
g_germanString, g_germanStringSize,
g_spanishString, g_spanishStringSize,
g_UIPageStoreSize,g_UIPageStoreMenu,
g_UIPageSignature,
g_flashUIDataEndMark}
SECTIONS
{
__INTERNAL_SRAM_BASE = 0x1FFF0000;
__INTERNAL_SRAM_SIZE = 0x00020000;
__SRAM_POOL = 0x2000FFF0;
__INTERNAL_FLASH_BASE = 0x00000000;
__INTERNAL_FLASH_SIZE = 0x00100000;
__INTERNAL_FLEXNVM_BASE = 0;
__INTERNAL_FLEXNVM_SIZE = 0;
__UNCACHED_DATA_START = 0x1FFF0000;
__UNCACHED_DATA_SIZE = 0x00020000;
__UNCACHED_DATA_END = 0x2000FFF0;
__EXTERNAL_MRAM_BASE = 0x60000000;
__EXTERNAL_MRAM_SIZE = 0x00080000;
__EXTERNAL_MRAM_ROM_BASE = 0x60000000;
__EXTERNAL_MRAM_ROM_SIZE = 0x00000000;
__EXTERNAL_MRAM_RAM_BASE = 0x60000000;
__EXTERNAL_MRAM_RAM_SIZE = 0x00080000;
__EXTERNAL_LCD_BASE = 0x60000000;
__EXTERNAL_LCD_SIZE = 0x1FFFF;
__EXTERNAL_LCD_DC_BASE = 0x60010000;
# MQX link time configurations
__DEFAULT_PROCESSOR_NUMBER = 1;
__DEFAULT_INTERRUPT_STACK_SIZE = 1024;
__KERNEL_DATA_VERIFY_ENABLE = 0; # Test SDRAM read/write
# Flashx configurations
__FLASHX_SECT_SIZE = 0x1000;
.vectors :
{
__VECTOR_TABLE_ROM_START = .; # Runtime vector table in sram
*(.vectors_rom)
. = ALIGN (0x4);
} > vectorrom
.cfmprotect :
{
*(.cfmconfig)
. = ALIGN (0x4);
} > cfmprotrom
.main_application :
{
*(KERNEL)
*(S_BOOT)
*(IPSUM)
*(.text)
*(.init)
*(.fini)
*(.eini)
*(.ctors)
*(.dtors)
. = ALIGN(0x4);
*(.rodata)
. = ALIGN(0x4);
*(.rdata)
. = ALIGN(0x4);
*(.exception)
. = ALIGN(0x4);
__exception_table_start__ = .;
EXCEPTION
__exception_table_end__ = .;
__sinit__ = .;
STATICINIT
. = ALIGN(0x4);
__COPY_OF_DATA = .;
} > rom
.main_application_data : AT(__COPY_OF_DATA)
{
. = ALIGN(128);
__VECTOR_TABLE_RAM_START = .; # Runtime vector table in sram
*(.vectors_ram)
. = ALIGN(512);
__BDT_BASE = .;
*(.usb_bdt)
__BDT_END = .;
__START_DATA = .;
*(.data)
__END_DATA = .;
. = ALIGN(0x4);
__START_SDATA = .;
*(.sdata)
__END_SDATA = .;
# Added this section for the internal flash update code to be relocated to RAM at run time
. = ALIGN(0x4);
__RELOCATE_START = .;
*(.relocate_code)
__RELOCATE_END = .;
. = ALIGN(0x4);
__SDA_BASE = .;
__SDA_BASE_ = __SDA_BASE;
. = ALIGN(16);
} > ram
.main_application_bss :
{
. = ALIGN(0x10);
__START_SBSS = .;
*(.sbss)
*(SCOMMON)
__END_SBSS = .;
__START_BSS = .;
*(.bss)
*(COMMON)
__END_BSS = .;
. = ALIGN(16);
} >> ram
.kernel_data : #AT(ADDR(.main_application_bss) + SIZEOF(.main_application_bss))
{
__KERNEL_DATA_START = ALIGN(0x10);
}
.end_of_kernel_data :
{
__KERNEL_DATA_END = .;
} > end_of_kd
.boot_stack :
{
_stack_end = .;
} > bstack
.end_of_boot_stack :
{
_stack_addr = .;
__SP_INIT = .;
__BOOT_STACK_ADDRESS = .;
} > end_bstack
__COPY_OF_EXT_RAM_DATA = __COPY_OF_DATA + SIZEOF(.main_application_data);
.ext_ram_data : AT(__COPY_OF_EXT_RAM_DATA)
{
. = ALIGN(0x4);
___extRAMStart = .;
*(.data_extram)
*(.rodata_extram)
___extRAMEnd = .;
. = ALIGN(16);
} > ext_ram
.ext_ram_bss :
{
. = ALIGN(16);
*(.bss_extram)
. = ALIGN(16);
} >> ext_ram
__UI_DATA_START = 0x00000;
__UI_DATA_END = 0xA0000;
__UI_DATA_LANG_ENGLISH_START = 0x00000;
__UI_DATA_LANG_FRENCH_START = 0x10000;
__UI_DATA_LANG_SPANISH_START = 0x20000;
__UI_DATA_LANG_GERMAN_START = 0x30000;
__UI_DATA_MENU_STORE_START = 0x090000;
__UI_DATA_MENU_STORE_END = __UI_DATA_MENU_STORE_START + 0xD000;
__UI_MENU_SIGNATURE = __UI_DATA_MENU_STORE_END - 4;
__UI_DATA_END_MARK = __UI_DATA_END - 4;
.ext_flash_data_english : AT(__UI_DATA_LANG_ENGLISH_START + ADDR(ext_flash))
{
. = ALIGN(0x4);
OBJECT(g_engStringSize, lang_english_strings_c.obj)
OBJECT(g_engString, lang_english_strings_c.obj)
. = ALIGN(16);
} > ext_flash
.ext_flash_data_french : AT(__UI_DATA_LANG_FRENCH_START + ADDR(ext_flash))
{
. = ALIGN(0x4);
OBJECT(g_frenchStringSize, lang_french_strings_c.obj)
OBJECT(g_frenchString, lang_french_strings_c.obj)
. = ALIGN(16);
} >> ext_flash
.ext_flash_data_spanish : AT(__UI_DATA_LANG_SPANISH_START + ADDR(ext_flash))
{
. = ALIGN(0x4);
OBJECT(g_spanishStringSize, lang_spanish_strings_c.obj)
OBJECT(g_spanishString, lang_spanish_strings_c.obj)
. = ALIGN(16);
} >> ext_flash
.ext_flash_data_german : AT(__UI_DATA_LANG_GERMAN_START + ADDR(ext_flash))
{
. = ALIGN(0x4);
OBJECT(g_germanStringSize, lang_german_strings_c.obj)
OBJECT(g_germanString, lang_german_strings_c.obj)
. = ALIGN(16);
} >> ext_flash
.ext_flash_data_menustore : AT(__UI_DATA_MENU_STORE_START + ADDR(ext_flash) )
{
. = ALIGN(0x4);
OBJECT(g_UIPageStoreSize, dr_menudata_c.obj)
OBJECT(g_UIPageStoreMenu, dr_menudata_c.obj)
. = ALIGN(16);
} >> ext_flash
.ext_flash_data_menustore_sign : AT(__UI_MENU_SIGNATURE + ADDR(ext_flash))
{
OBJECT(g_UIPageSignature, dr_menu_renderer_c.obj)
} >> ext_flash
.ext_flash_end : AT(__UI_DATA_END_MARK + ADDR(ext_flash))
{
OBJECT(g_flashUIDataEndMark, spiflash_ui_data_c.obj)
} >> ext_flash
# Locate the ROM copy table into ROM after the initialized data
_romp_at = __COPY_OF_EXT_RAM_DATA + SIZEOF(.ext_ram_data);
.romp : AT (_romp_at)
{
__S_romp = _romp_at;
WRITEW(__COPY_OF_DATA); #ROM start address
WRITEW(ADDR(.main_application_data)); #RAM start address
WRITEW(SIZEOF(.main_application_data)); #size
# Added for copying the SRAM data to SRAM in runtime
WRITEW(__COPY_OF_EXT_RAM_DATA); #ROM start address
WRITEW(ADDR(.ext_ram_data)); #RAM start address
WRITEW(SIZEOF(.ext_ram_data)); #size
WRITEW(0);
WRITEW(0);
WRITEW(0);
}
_flashx_start = _romp_at + SIZEOF(.romp);
# flashx working area spans across the whole rest of Flash memory
__FLASHX_START_ADDR = ((_flashx_start + __FLASHX_SECT_SIZE - 1) / __FLASHX_SECT_SIZE) * __FLASHX_SECT_SIZE;
__FLASHX_END_ADDR = __INTERNAL_FLASH_BASE + __INTERNAL_FLASH_SIZE;
# This is for marking the end of FW area (8 Bytes)
.endmark :
{
WRITEW(0x12345678);
} > end_mark
# This is for storing FW version(8 Bytes)
.fwvermark :
{
*(.fwvermark)
} > fwver_mark
/* Section created to relocate code in specific Flash address */
.ext_flash_txt :
{
. = ALIGN(4);
ext_flash_txt_start = .;
*(.section_ext_flash_txt)
ext_flash_txt_end = .;
. = ALIGN(4);
} > ext_flash_txt
}
/* EOF */