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