CoRoutines, removing routines created.

phil4321 wrote on Tuesday, October 16, 2007:


I have created a coRoutine task much like the flashLed example. The functions work fine as per the example. What I would like to do is deleted the tasks created (on an external event happening) and re-initialize my  StartTimerCoRoutines( unsigned portBASE_TYPE uxNumberToCreate ) function shown below with a new number of tasks.

I have taken a look at the functions in croutine.c and the only one I think I could use is the xCoRoutineRemoveFromEventList( const xList *pxEventList ) function, but I am unsure how to get a pointer to the events list.

Hope you can help. Is this a normal task to do using the coRoutine functions or intended use.



void vDevPoll_StartTimerCoRoutines( unsigned portBASE_TYPE uxNumberToCreate )
  unsigned portBASE_TYPE uxIndex;

  if( uxNumberToCreate > crfMAX_TIMER_TASKS )
    uxNumberToCreate = crfMAX_TIMER_TASKS;

  /* Create the queue used to pass data between the co-routines. */
  xTimerQueue = xQueueCreate( crfQUEUE_LENGTH, sizeof( unsigned portBASE_TYPE ) );

    if( xTimerQueue )
        /* Create uxNumberToCreate ‘fixed delay’ co-routines. */
        for( uxIndex = 0; uxIndex < uxNumberToCreate; uxIndex++ )
            xCoRoutineCreate( prvDevPoll_FixedDelayCoRoutine, crfFIXED_DELAY_PRIORITY, uxIndex );

        /* Create the ‘flash’ co-routine. */
        xCoRoutineCreate( prvDevPoll_TimerCoRoutine, crfTIMER_PRIORITY, crfTIMER_INDEX );
        // Start the scheduler.
     //   vTaskStartScheduler();       

davedoors wrote on Tuesday, October 16, 2007:

I don’t know much about coroutines, but maybe you could just reinitialize all the lists by calling prvInitialiseCoRoutineLists()?  You would have to ensure no coroutines were referenced from an event list also, otherwise you would end up with dangling pointers.  You could then either free the memory used by the coroutine structure or reuse the same structures.

phil4321 wrote on Tuesday, October 16, 2007:

Thanks for the response, It is not possible to use the prvInitialiseCoRoutineLists() function as it is private to the Coroutine.c class.