asdf asdf

Coldfire MCF51 Linker  Fill Flash & CRC Functions for CW 5.9.0

Discussion created by asdf asdf on Mar 17, 2008
Latest reply on Mar 28, 2008 by Mike Dellisanti

I want to accomplish the following at/before compile and/or link time:

1)         Fill unused flash with a known preset value.

2)         Add a CRC value at the end of an area of flash.

3)         Change S Record format from S3/S7 to S2/S8.

 

I am using CodeWarrior 5.9.0 with a Coldfire v1 MCF51QE128LQFP80 target. I am using the default “Embedded Coldfire Linker”. I have seen numerous examples of how to accomplish all of these for the “Smart Linker” using a prm file. But the “Embedded Coldfire Linker” does not seem to support the same syntax, and the linker documentation does not list options for a CRC, S-Record format change, nor clearly lists a way to fill unused Flash. I would like to know if it is possible to use the “Smart Linker” with the Coldfire V1 processor for linking, as it supports the functions I need. If not, what is the correct syntax for an “Embedded Coldfire Linker” LCF file. My current LCF file is listed below.

 
 
 
Code:
WRITES0COMMENT "0123456789"MEMORY {   code        (RX)  : ORIGIN = 0x00000410, LENGTH = 0x0001FBF0   userram     (RWX) : ORIGIN = 0x00800000, LENGTH = 0x00002000}SECTIONS {# Heap and Stack sizes definition  ___heap_size     = 0x0400;  ___stack_size    = 0x0400;# MCF51QE128 Derivative Memory map definitions from linker command files:# ___RAM_ADDRESS, ___RAM_SIZE, ___FLASH_ADDRESS, ___FLASH_SIZE linker# symbols must be defined in the linker command file.# 8 Kbytes Internal SRAM   ___RAM_ADDRESS = 0x00800000;   ___RAM_SIZE    = 0x00002000;# 128 KByte Internal Flash Memory   ___FLASH_ADDRESS  = 0x00000000;   ___FLASH_SIZE     = 0x00020000;  .userram        : {} > userram  .code     : {} > code  .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 :  {    ___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  __SP_INIT             = ___SP_INIT;  ___SP_AFTER_RESET     = __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);  }}
 


Message Edited by hexsmith on 2008-03-17 11:14 PM

Outcomes