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.
There are bugs in GCC interworking code in CW2. Try compiling to ARM mode only.
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.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.