Tick wrong on Crossworks 2 for ARM?
I am working with Crossworks 2 for ARM, an Olimex 2378 demo board, and FreeRTOS 5.4.0. The demo for ARM7_LPC2368_Rowley would not compile at all, so I started my own simple FreeRTOS project. I eventually got it running, but only when interrupts are disabled (my sole task runs happily forever).
What appears to be happening is that irq_handler in vic_irq_handlers.s expects vNonPreemptiveTick() to exit differently than it does. vNonPreemptiveTick() reloads processor context and ends up in the middle of irq_handler in system mode, which eventually leads to another context reload from garbage and a prefetch abort.
Any advice on how to make this work right? I am new to Crossworks, ARM, and FreeRTOS.
Thanks,
Dan.
Tick wrong on Crossworks 2 for ARM?
There are bugs in GCC interworking code in CW2. Try compiling to ARM mode only.
Tick wrong on Crossworks 2 for ARM?
Everything was ARM mode.
I got things going by removing this line from portISR.c
void vNonPreemptiveTick( void ) __attribute__ ((interrupt ("IRQ")));
The same approach did not work for vPreemtiveTick(). It looks like irq_handler has to be different to allow this to work.
So am I correct in assuming that the port for ARM7_LPC2368_Rowley is meant for Crossworks 1.x? Will I find an irq_handler there that is more compatible with FreeRTOS?
Thanks,
Dan.