in which case a ready thread is moved to the Running state (2). A running thread may also be blocked (3) by calling a blocking API function (such as waiting on a semaphore). A blocked thread may be made ready (4) when un-blocked by the actions of another thread or interrupt handler. FreeRTOS has an additional Suspended state which we ignore for now.