FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [December 2004 Threads] FreeRTOS + Rowley CrossworksPosted 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 CrossworksPosted 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 CrossworksPosted 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 CrossworksPosted 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 CrossworksPosted 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 CrossworksPosted 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 CrossworksPosted 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.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|