Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem


Loading

FreeRTOS + Rowley Crossworks

Posted by Nobody/Anonymous on December 9, 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.

RE: FreeRTOS + Rowley Crossworks

Posted by Nobody/Anonymous on December 9, 2004
Don't know about Rowley program, but as there is a warning on every section ".ABC is too large to fit in RAM" it looks like the link failed so a data abort would be expected.

RE: FreeRTOS + Rowley Crossworks

Posted by Nobody/Anonymous on December 9, 2004
I think the messages are just defined in case when there is a error. The program itself does not give any message, just a perfect build (and I did had error befor, when I was creating the linker script).

Just take al look to the configuration itself please.

RE: FreeRTOS + Rowley Crossworks

Posted by Richard on December 9, 2004
Is that a standard linker file? If so I doubt there is anything wrong with it.

Are you building for the Olimex board?

I may be able to have a look at the build if you could send me a small application that is built with the -g option as follows:

+ in main.c remove all the lines that create tasks - other than the flash tasks. (remove lines such as vStartIntegerMathTasks()).

+ also remove the line that starts: sTaskCreate( vErrorChecks

+ delete the functions vErrorChecks(), prvCheckOtherTasksAreStillRunning(), and vMemCheckTask() [all in main.c].

+ in the makefile remove the lines

../Common/Minimal/integer.c \
../Common/Minimal/PollQ.c \
../Common/Minimal/comtest.c \
../Common/Minimal/flop.c \
../Common/Minimal/semtest.c \
../Common/Minimal/dynamic.c \
../Common/Minimal/BlockQ.c \

serial/serialISR.c

and

serial/serial.c \

The build should then create a small application with nothing but the flash tasks.

If you then send the entire FreeRTOS directory - including all the object files, makefiles, hex file, etc in a zip file to the address on the FreeRTOS contacts page.

Can't promise anything but I can have a look.

Regards.

RE: FreeRTOS + Rowley Crossworks

Posted by Nobody/Anonymous on December 9, 2004
That costs me alot of time to that, plus it's not nessesary.

Just copy/paste my linker script in a file (lpc2106-ram.ld), and compile it with the freertos standard application for the omilex LPC2106 board. Try if you are able to debug with gdb, if so, then something is wrong with my hardware (what i doubt).

Like i said; all the files of freertos in crossworks is standard, accept the linker script. So I had to port it to the "Crossworks" standard, which is a XML file. (see 1st part of my fist post). When I compile freertos in Crossworks (is not a GNU compiler), it creates from the XML file a linker script file, (2nd part of my first post), which does look like as a normal GNU linker script.

Regards, Bart

RE: FreeRTOS + Rowley Crossworks

Posted by Richard on December 9, 2004
> That costs me alot of time to that

Thats up to you. As it happens I cannot simulate programs built to execute in RAM anyway.

>Just copy/paste my linker script in a file
>(lpc2106-ram.ld), and compile it with the
>freertos standard application for the omilex
>LPC2106 board. Try if you are able to debug with
>gdb, if so, then something is wrong with my
>hardware (what i doubt).

Done that already. It does not link due to the .bss section being too large. Is there a separate heap aread allocated? You could try setting portTOTAL_HEAP_SIZE down.

RE: FreeRTOS + Rowley Crossworks

Posted by Richard on December 19, 2004
There is now a demo application that uses Rowley CrossWorks available for download from the WEB site. See the TCP/IP demo pages.


[ Back to the top ]    [ About FreeRTOS ]    [ Privacy ]    [ Sitemap ]    [ ]


Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Careers

FreeRTOS and other embedded software careers at AWS.


Latest News

FreeRTOS kernel V10.0.1 is available for immediate download. Now MIT licensed.


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Espressif ESP32

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS

Xilinx Microblaze and Zynq partner