AnsweredAssumed Answered

How can I make a RAM.mot file?

Question asked by NA JONGMIN on Mar 24, 2014
Latest reply on Jan 5, 2015 by William Luitje

Hello !

I need to use the Boot Assist Module to boot an application from RS232c bust to internal SRAM.

My MCU is MPC5644A.

So, I made a Ram target RAM.mot file and Binary file. But It doesn't work well.

When I read a discussion(https://community.freescale.com/message/386416#386416), I did modify lcf file.

But, I find out a file is different it.

I use a Codewarrior project wizard for make a project.

A project includes Startup Code.(__ppc_eabi_init.c, MPC5644A_HWInit.c, MPC55xx_init_debug.c, MPC55xx_init.c) So, When I move "entry point (function __start() ) at the start of RAM image – at address 0x4000_0000.", There are some problem.

The problem is 3 warings.

 

1. multiply-defined: '__start'  in Runtime.PPCEABI.VS.UC.a in the file __start.o
Previously defined in __start.o
ignored: '__start'  in Runtime.PPCEABI.VS.UC.a from the file __start.o

 

2. multiply-defined: '__copy_rom_section'  in Runtime.PPCEABI.VS.UC.a in the file __start.o
Previously defined in __start.o
ignored: '__copy_rom_section'  in Runtime.PPCEABI.VS.UC.a from the file __start.o

 

3. multiply-defined: '__init_bss_section'  in Runtime.PPCEABI.VS.UC.a in the file __start.o
Previously defined in __start.o
ignored: '__init_bss_section'  in Runtime.PPCEABI.VS.UC.a from the file __start.o

 

I think  this problem is caused by calling a __startup function by __ppc_eabi_init.c.

What I have to solve this problem?  


Refer to my lcf file.

/* lcf file for MPC560xB (debug RAM version)                                */
/* Note internal memory configurations vary among the various family        */
/* devices.                                                                 */
/*                                                                          */
/*   +-----------+------------+                                             */
/*   |  Device   | MPC5644A   |                                             */
/*   +-----------+------------+                                             */
/*   |SRAM/Flash | 192KB/     |                                             */
/*   |           | 4MB        |                                             */
/*   +-----------+------------+                                             */
/*                                                                          */
/* These memory definitions will allow the stationery example to run on     */
/* the smallest */

MEMORY
{
    init:               org = 0x40000000,   len = 0x00000288
    pseudo_rom:         org = 0x40000288,   len = 0x00000D30
    exception_handlers: org = 0x40000FB8,   len = 0x000000B0
    internal_ram:       org = 0x40001068,   len = 0x00000014
    heap  :             org = 0x4000107C,   len = 0x00008000
    stack :             org = 0x4000907C,   len = 0x00008000
}

SECTIONS
{
    GROUP : {
      .init_vle (VLECODE) : {
        *(.init)
        *(.init_vle)
      }
      .init  : {}
    } > init

    GROUP : {
      .ivor_branch_table (VLECODE) ALIGN (4096) : {}
      .__exception_handlers  (VLECODE) LOAD (_e_ivor_branch_table) : {}
    } > exception_handlers

    GROUP : {
        .text (TEXT) ALIGN(0x10) : {}
        .text_vle (VLECODE) ALIGN(0x10): {
             *(.text)
             *(.text_vle)
         }
        .rodata (CONST) : {
            *(.rdata)
            *(.rodata)
        }
        .ctors : {}
        .dtors : {}
        extab : {}
        extabindex : {}
    } > pseudo_rom

    GROUP : {   
       .__uninitialized_intc_handlertable ALIGN(0x10) : {}
       .data   : {}
       .sdata  : {}
       .sbss   : {}
       .sdata2 : {}
       .sbss2  : {}
       .bss    : {}
    } > internal_ram
}

/* Freescale CodeWarrior compiler address designations */

_stack_addr = ADDR(stack)+SIZEOF(stack);
_stack_end  = ADDR(stack);
_heap_addr  = ADDR(heap);
_heap_end   = ADDR(heap)+SIZEOF(heap);

/* Exceptions Handlers Location (used in Exceptions.c for IVPR initialization) */

EXCEPTION_HANDLERS = ADDR(exception_handlers);

Outcomes