Bug with vCoRoutineSchedule()

dkure wrote on Monday, August 22, 2011:

Hi All,

I hit what I think is a bug with the CoRoutine Scheduler.

The bug is this.

Place vCoRoutineSchedule() in vApplicationIdleHook().
Create one task, that calls while (1) vTaskDelay(10);
Watch the board crash.

The problem with this arcitecture is that a co-routine must be created
before calling vCoRoutineSchedule(). This is because vCoRoutineSchedule()
depends on prvInitialiseCoRoutineLists(), which is only called by               xCoRoutineCreate().

However from the code in xCoRoutineCreate() I can see no need for it calling
prvInitialiseCoRoutineLists(), instead I think that                             prvInitialiseCoRoutineLists() should be called by vTaskStartScheduler().

The reason I have the architecure above is so that I can initialise hardware
with the use a vTaskDelay() when waiting for hardware to come up.
After hardware is initialised I then start worker tasks, and in this case
I start a watchdog worker co-routine.

Richard what do you think of the problem & solution? If you don’t really like   the solution I am open to other ideas. Alternatively could you please place a   mention somewhere in the API documentation that a co-routine must be created    BEFORE calling vCoRoutineSchedule().

Regards Paul

rtel wrote on Monday, August 22, 2011:

I will have to take a look at it.  Co-routines don’t get used that often, and I think all the examples create the co-routines before the scheduler is started.  I would be grateful if you could open a bug tracker (in SourceForge) for this so it doesn’t get lost until I get time to look at it.


dkure wrote on Monday, August 22, 2011:


You are correct saying all the examples create co-routines before starting the scheduler. So hopefully not many people have hit this bug.

I’ll post it on the bug tracker and place a link here so the two can be married up.

dkure wrote on Monday, August 22, 2011:

Bug is on the tracker here: