FreeRTOS and Secondary Bootloader Fail

slicetex wrote on Monday, February 08, 2010:


I cannot get a FreeRTOS system to work from starting
address 0x8000 with a secondary bootloader.
I’m using a NXP LPC2148 microcontroller.

My application program crash when vTaskStartScheduler()
is called.

If application program is located on flash address 0x0000,
FreeRTOS works.

Anyone did something like this ?.


1) vTaskStartScheduler() is called in supervisor mode.
Interrupt disabled.

2) Interrupt vector table is remaped to RAM with MEMMAP=2.
First 64 bytes, from address 0x8000 are copied to RAM
address 0x40000000.

3) Linker script memory areas:
flash (rx): ORIGIN = 0x00008000, LENGTH = 468K
ram_ivt(rwx): ORIGIN = 0x40000000, LENGTH = 64
ram (rwx): ORIGIN = 0x40000040, LENGTH = 32K-64

4) Secondary bootloader, jumps to user program (0x8000)
in supervisor mode also.

5) FreeRTOS version: 6.0.2

6) Toolchain: GCC 4.1.1

7) MCU: LPC2148.

Thanks in advance.

Boris Estudiez.-

Slicetex Electronics

preetpal wrote on Tuesday, March 09, 2010:

I am using LPC2148 with Secondary bootloader from and it works perfectly.  Secondary bootloader is of 4k in size and FreeRTOS works great.  I think you might not be allocating correct supervisor stack or not entering supervisor mode before calling vTaskStartScheduler()

slicetex wrote on Friday, March 12, 2010:

Hi preetpal,

Are you using GCC ?.

Could you share your linker script and c-runtime assembler files, please ?.

Thanks in advance.

Boris Estudiez.-

Slicetex Electronics

Thanks a lot

preetpal wrote on Friday, March 12, 2010:

I’m using GNUARM 4.3.2.  Since I have WINARM installed, it grabs the cygwin sh/make.exe etc. from there.