This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

When does RTX (re)evaluate which thread to run next?

Hi,
a hopefully simple example to explain the background of my question.

Say, an interrupt handler is interrupting a thread "some_thread_id_A" and looks as follows:

SomeIRQHandler(void)

{

... some code that handles the source of the event

// trigger an event for an RTX-operated thread

osSignalSet(some_thread_id_B, SOME_EVENT);

}


Now, let's further assume that the thread "some_thread_id_B"

- is suspended on SOME_EVENT before the above interrupt happens.

- is the highest prio thread in the application code


After the above interrupt, the event has obviously happened and some_thread_id_B would no longer be suspended.


Now, here's the question:

When does RTX evaluate the thread priorities and the events? When does it figure out that some_thread_id_B is now ready to run? Right after the interrupt handler returns? Or at the time tick?

To be even more specific: Will SomeIRQHandler() return to thread "some_thread_id_A" (no longer being the highest prio ready-to-run thread after the event) or will it return to thread "some_thread_id_b"?


I'm running RTX on a Cortex M0.

Thx


P.S: You might remember that this question has been asked by me in the old ARM discussions Forums, but I asked this Forum's admins, they told me that it has not been migrated and that I should ask the question again.

Parents
  • Hi, Ken

    thanks for answer - let me just confirm that I got what you are saying, using my example:

    If I call "osSignalSet()" from an ISR, it will call "isrSignalSet()" (down the path). Once this call is completed (through all the involved subroutines etc.), RTX will enter its scheduler, decide what is the next READY thread and return to this READY thread. This thread is not necessarily the thread which was executed when the ISR came up. Correct?

    Thx
    Arndt

Reply
  • Hi, Ken

    thanks for answer - let me just confirm that I got what you are saying, using my example:

    If I call "osSignalSet()" from an ISR, it will call "isrSignalSet()" (down the path). Once this call is completed (through all the involved subroutines etc.), RTX will enter its scheduler, decide what is the next READY thread and return to this READY thread. This thread is not necessarily the thread which was executed when the ISR came up. Correct?

    Thx
    Arndt

Children