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 arndt,

    You understand it correctly and just to emphasize it is good practice to keep the interrupt service routine (ISR) as short as possible. By passing messages to tasks to handle the heavy lifting of the application this can help keep the ISR small.

    I hope this helps and if this answers the question please mark it as answered.

    Thanks,
    Ken

Reply
  • Hi arndt,

    You understand it correctly and just to emphasize it is good practice to keep the interrupt service routine (ISR) as short as possible. By passing messages to tasks to handle the heavy lifting of the application this can help keep the ISR small.

    I hope this helps and if this answers the question please mark it as answered.

    Thanks,
    Ken

Children