Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training




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 ]    [ Sitemap ]    [ ]




Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.


Free TCP/IP and file system demos for the RTOS


Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

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

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

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

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists