OS_WakeTask( ) & OS_PutMailCond1( )

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • OS_WakeTask( ) & OS_PutMailCond1( )

    My setup: MSP430F5529 running at 25 MHz MCLK

    embOS 3.82s


    I found that I had a probable "race" condition when I use a single-byte mailbox and follow up with OS_WakeTask in the interrupt service routine.

    I also found that the OS_Delay( ) that I added to the front end of the Task (after the while...) was not as good as OS_Delayus( ).

    So, what I have found is that my code runs very well with the following...

    Inside of the interrupt service routine:




    msg = 1;






    Inside of the task being "awakened" -

    static void xxxTask(void)
    char i,InMsg;

    // Clear all associated flags...

    OS_Delayus(2000); // works better than OS_Delay(2);


    Some questions:

    1. Is there an actual "race" condition without adding the OS Delay? (It certainly seems like it - I can see differences in the way my code behaves.)

    2. It also appears that OS_Delayus gives better "granularity" than OS_Delay. Is that true?

    3. It also seems that I need to give enough time for the OS to process my message, and if I put too little delay, it definitely makes a difference.

    4. My original code did not have the OS_WakeTask added, so I was processing interrupts a bit slower than I wanted, depending on the time at the end of

    the task to determine when I would process an interrupt.

    Using task events was not an option initially for this "ISR --> task" situation, but I may look into using it, especially if it seems like there is a race condition.

    Thanks for any input you might have!

    I can definitely say that embOS has been a beneficial part of my life on this product!


    Todd Anderson
  • OS_WakeTask( ) & OS_PutMailCond1( )

    I ended up moving away from this and using a Task Event instead. It turns out that I can go from ISR to executing inside of a task in under 20 Usec with a task event, and the Mailbox + WakeTask was taking Milliseconds.


    Todd Anderson