Thanks for the quick reply.
Yes, I am copying from ROM to RAM. But in ROM, my data is initialized to zero.
I already set the active configuration to Flash. My IDE is
CodeWarrior Development Studio for ColdFire Architectures Version 7.2 Build 91218.
Here is my linker script: -
# Sample Linker Command File for CodeWarrior for ColdFire
KEEP_SECTION { .vectortable }
KEEP_SECTION { .cfmconfig }
# Memory ranges
MEMORY {
interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000400 # 1K Vector
cfmprotect (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000020 # 32 bytes Flash Configuration Settings
flash (RX) : ORIGIN = 0x00000420, LENGTH = 0x0007FBE0 # 512K - 0x420 Flash
ram (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00010000 # 64K RAM
ipsbar (RWX) : ORIGIN = 0x40000000, LENGTH = 0x0001FFFF
}
SECTIONS {
#########################################################
# Vector Section
.vectors : {
___VECTOR_BASE = . ;
vectors.c (.vectortable)
} > interrupts
#########################################################
# ColdFire Flash Configuration Section
.cfm : {
*(.cfmconfig)
. = ALIGN(0x4);
} > cfmprotect
#########################################################
# Code Section
.code : {
startcf.c (.text)
*(.text)
. = ALIGN(0x10);
*(.rodata)
. = ALIGN(0x10);
___DATA_ROM = . ;
} > flash
#########################################################
# Initialized Data Section
.data : AT(___DATA_ROM) {
___BDT_START = . ;
. = . + 512 ;
___BDT_END = . ;
. = ALIGN (0x4);
___DATA_RAM = . ;
___DATA_RAM_START = . ;
___DATA_START = . ;
___sinit__ = .;
STATICINIT
*(.data)
*(.relocate_code)
. = ALIGN (0x4);
___DATA_END = . ;
___SDATA_START = . ;
*(.sdata)
. = ALIGN (0x4);
___SDATA_END = . ;
} > ram
#########################################################
# Uninitialized Data Section
.bss : {
___SBSS_START = . ;
*(.sbss)
. = ALIGN(0x4);
*(SCOMMON)
. = ALIGN(0x4);
___SBSS_END = . ;
___BSS_START = . ;
*(.bss)
*(COMMON)
. = ALIGN(0x4);
___BSS_END = . ;
___DATA_RAM_END = . ;
} >> ram
___FLASHBAR = 0x00000000;
___FLASHBAR_SIZE = 0x00080000;
___RAMBAR = ADDR(ram);
___RAMBAR_SIZE = 0x00010000;
___IPSBAR = ADDR(ipsbar);
___SP_INIT = (___RAMBAR - (___RAMBAR % 4)) + ___RAMBAR_SIZE - 4;
___SP_END = ___SP_INIT - 0x00000400;
___SP_AFTER_RESET = ___RAMBAR + ___RAMBAR_SIZE - 4;
}