Mike Dellisanti

Fill FLASH with a specified value?

Discussion created by Mike Dellisanti on Oct 23, 2007
Latest reply on Oct 25, 2007 by CrasyCat
I am using Codewarrior 6.4 for Coldfire (MFC52211) and I'd like to add a command to the linker control file to fill unused FLASH memory locations with a default value.  It appears that there is some syntax for this specified in the build tools manual, but I could use a short example to see how its implemented.
 
Below is the sample lcf file that I have been messing about with if someone wants a starting point.
 
Thanks!
 
# Sample Linker Command File for CodeWarrior for ColdFire

# Memory ranges 
MEMORY {
   vectorrom   (RX)  : ORIGIN = 0x00000000, LENGTH = 0x00000420
   code        (RX)  : ORIGIN = 0x00000420, LENGTH = 0x0001FBE0u
#   vectorram   (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00000400
#   userram     (RWX) : ORIGIN = 0x20000400, LENGTH = 0x00003C00
   userram     (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00003FFF
}
FORCE_ACTIVE { VECTOR_TABLE }
SECTIONS {
# Heap and Stack sizes defilcfnition
# ___heap_size   = 0x0000;
 ___stack_size     = 0x1000;
 
# MCF52211 Derivative Memory map definitions from linker command files:
# __IPSBAR, __RAMBAR, __RAMBAR_SIZE, __FLASHBAR, __FLASHBAR_SIZE linker
# symbols must be defined in the linker command file.
# Memory Mapped Registers (IPSBAR= 0x40000000)
   ___IPSBAR         = 0x40000000;
# 16 Kbytes Internal SRAM
   ___RAMBAR         = 0x20000000;
   ___RAMBAR_SIZE    = 0x00004000;
# 128 KByte Internal Flash Memory
   ___FLASHBAR       = 0x00000000;
   ___FLASHBAR_SIZE  = 0x00020000;
  .userram   : {} > userram  
  .code     : {} > code
#  .vectorram : {} > vectorram  
  .vectorrom : {} > vectorrom  
 
 .vectors :
 {
  mcf5xxx_vectors.s (.text) 
  . = ALIGN (0x4);
 } >> vectorrom
 .text :
 {
  *(.text)
  . = ALIGN (0x4);
  *(.rodata)
  . = ALIGN (0x4);  
  ___ROM_AT = .;
  ___DATA_ROM = .;
 } >> code
 .data : AT(___ROM_AT)
 { 
  ___DATA_RAM = .;
  . = ALIGN(0x4);
#  *(.exception) 
#  . = ALIGN(0x4); 
#  __exception_table_start__ = .;
#  EXCEPTION
#  __exception_table_end__ = .;
  
#  ___sinit__ = .;
#     STATICINIT
#  __START_DATA = .;
  *(.data)
  . = ALIGN (0x4);
  __END_DATA = .;
  __START_SDATA = .;
  *(.sdata)
  . = ALIGN (0x4);
  __END_SDATA = .;
  ___DATA_END = .;
  __SDA_BASE = .;
  . = ALIGN (0x4);
 } >> userram
 .bss :
 {
  ___BSS_START = .;
  __START_SBSS = .;
  *(.sbss)
  . = ALIGN (0x4);
  *(SCOMMON)
  __END_SBSS = .;
  __START_BSS = .;
  *(.bss)
  . = ALIGN (0x4);
  *(COMMON)
  __END_BSS = .;
  ___BSS_END = .;
  . = ALIGN(0x4);
 } >> userram
 .custom :
 {
  ___SP_END  = .;
#  ___HEAP_START = .;
#  ___heap_addr = ___HEAP_START;
#  ___HEAP_END  = ___HEAP_START + ___heap_size;
#  ___SP_END  = ___HEAP_END;
  ___SP_INIT  = ___SP_END + ___stack_size;
  . = ALIGN (0x4);
 } >> userram
   
# ___VECTOR_RAM  = ADDR(.vectorram);
 
 __SP_INIT  = ___SP_INIT;
 _romp_at = ___ROM_AT + SIZEOF(.data);
 .romp : AT(_romp_at)
 {
  __S_romp = _romp_at;
  WRITEW(___ROM_AT);
  WRITEW(ADDR(.data));
  WRITEW(SIZEOF(.data));
  WRITEW(0);
  WRITEW(0);
  WRITEW(0);
 }
}

Outcomes