nobody wrote on Thursday, December 09, 2004:
Hi, because of the debugger and jtag interface i am stuck on Rowley Crossworks for ARM. I’ts quite a nice program, but I have a little program. I just imported all the freertos and source files + boot.s. Only thing differt is that Rowley uses xml files to create the memory map linker file. mine (ARM7 2106 RAM) looks like this:
<!DOCTYPE Linker_Placement_File>
<Root name="Internal RAM" >
<MemorySegment size="0x00010000" access="Read/Write" start="0x40000000" name="RAM" >
<ProgramSection inputsections="__stack_end__ = 0x40000000 + 64K - 4;" name="__stack_end__" />
<ProgramSection load="Yes" inputsections=" *(.startup)" name=".startup" />
<ProgramSection load="Yes" inputsections="*(.text)*(.rodata)*(.rodata*)*(.glue_7)*(.glue_7t)" name=".prog" />
<ProgramSection load="Yes" inputsections="__data_beg__ = .;
__data_beg_src__ = __prog_end__;*(.data)
__data_end__ = .;" name=".data" />
<ProgramSection alignment="0x4" load="Yes" inputsections="__bss_beg__ = .;*(.bss)" name=".bss" />
</MemorySegment>
</Root>
After compile, the program create this file:
MEMORY
{
RAM (wx) : ORIGIN = 0x40000000, LENGTH = 0x00010000
}
SECTIONS
{
__RAM_segment_start__ = 0x40000000;
__RAM_segment_end__ = 0x40010000;
__stack_end__ __RAM_segment_start__ (NOLOAD) :
{
____stack_end___start__ = .;
__stack_end__ = 0x40000000 + 64K - 4;
}
____stack_end___end__ = ____stack_end___start__ + SIZEOF(__stack_end__);
. = ASSERT(____stack_end___end__ >= __RAM_segment_start__ && ____stack_end___end__ <= (__RAM_segment_start__ + 0x00010000) , "__stack_end__ is too large to fit in RAM memory segment");
.startup ____stack_end___end__ :
{
__startup_start__ = .;
*(.startup)
}
__startup_end__ = __startup_start__ + SIZEOF(.startup);
. = ASSERT(__startup_end__ >= __RAM_segment_start__ && __startup_end__ <= (__RAM_segment_start__ + 0x00010000) , ".startup is too large to fit in RAM memory segment");
.prog __startup_end__ :
{
__prog_start__ = .;
*(.text)*(.rodata)*(.rodata*)*(.glue_7)*(.glue_7t)
}
__prog_end__ = __prog_start__ + SIZEOF(.prog);
. = ASSERT(__prog_end__ >= __RAM_segment_start__ && __prog_end__ <= (__RAM_segment_start__ + 0x00010000) , ".prog is too large to fit in RAM memory segment");
.data __prog_end__ :
{
__data_start__ = .;
__data_beg__ = .;
__data_beg_src__ = __prog_end__;*(.data)
__data_end__ = .;
}
__data_end__ = __data_start__ + SIZEOF(.data);
. = ASSERT(__data_end__ >= __RAM_segment_start__ && __data_end__ <= (__RAM_segment_start__ + 0x00010000) , ".data is too large to fit in RAM memory segment");
.bss (__data_end__ + 3) / 4 * 4 :
{
__bss_start__ = .;
__bss_beg__ = .;*(.bss)
}
__bss_end__ = __bss_start__ + SIZEOF(.bss);
. = ASSERT(__bss_end__ >= __RAM_segment_start__ && __bss_end__ <= (__RAM_segment_start__ + 0x00010000) , ".bss is too large to fit in RAM memory segment");
__stack_end__ __bss_end__ (NOLOAD) :
{
____stack_end___start__ = .;
__stack_end__ = 0x40000000 + 64K - 4;
}
____stack_end___end__ = ____stack_end___start__ + SIZEOF(__stack_end__);
. = ASSERT(____stack_end___end__ >= __RAM_segment_start__ && ____stack_end___end__ <= (__RAM_segment_start__ + 0x00010000) , "__stack_end__ is too large to fit in RAM memory segment");
.startup ____stack_end___end__ :
{
__startup_start__ = .;
*(.startup)
}
__startup_end__ = __startup_start__ + SIZEOF(.startup);
. = ASSERT(__startup_end__ >= __RAM_segment_start__ && __startup_end__ <= (__RAM_segment_start__ + 0x00010000) , ".startup is too large to fit in RAM memory segment");
.prog __startup_end__ :
{
__prog_start__ = .;
*(.text)*(.rodata)*(.rodata*)*(.glue_7)*(.glue_7t)
}
__prog_end__ = __prog_start__ + SIZEOF(.prog);
. = ASSERT(__prog_end__ >= __RAM_segment_start__ && __prog_end__ <= (__RAM_segment_start__ + 0x00010000) , ".prog is too large to fit in RAM memory segment");
.data __prog_end__ :
{
__data_start__ = .;
__data_beg__ = .;
__data_beg_src__ = __prog_end__;*(.data)
__data_end__ = .;
}
__data_end__ = __data_start__ + SIZEOF(.data);
. = ASSERT(__data_end__ >= __RAM_segment_start__ && __data_end__ <= (__RAM_segment_start__ + 0x00010000) , ".data is too large to fit in RAM memory segment");
.bss (__data_end__ + 3) / 4 * 4 :
{
__bss_start__ = .;
__bss_beg__ = .;*(.bss)
}
__bss_end__ = __bss_start__ + SIZEOF(.bss);
. = ASSERT(__bss_end__ >= __RAM_segment_start__ && __bss_end__ <= (__RAM_segment_start__ + 0x00010000) , ".bss is too large to fit in RAM memory segment");
}
When I go to debug, I get kicked to .data abort. So something is wrong, but I can’t find what. There is no option to convert or import a GCC linker script.