modm API documentation
|
#include <modm/processing/rtos/thread.hpp>
Classes | |
class | Lock |
When created suspends all real time kernel activity while keeping interrupts (including the kernel tick) enabled More... | |
Public Member Functions | |
Thread (uint32_t priority=0, uint16_t stackDepth=minimalStackSize, const char *name=nullptr) | |
Create a Thread. More... | |
virtual | ~Thread () |
Delete the thread. | |
uint32_t | getPriority () const |
Obtain the priority of the thread. | |
void | setPriority (uint32_t priority) |
Set the priority of the thread. More... | |
Protected Member Functions | |
virtual void | run () = 0 |
Worker function. More... | |
Static Protected Member Functions | |
static void | sleep (TickType_t ticks) |
Delay for the number of ticks. More... | |
static void | yield () |
Force a context switch. More... | |
suspend() and resume() are dangerous and are therefore not available.
Example: thread 1 1) lock mutex M 2) do something 3) unlock mutex
thread 2 1) suspend thread 1 2) lock mutex 3) unlock mutex M 4) resume thread 1
If 2.1 happens during 1.2 the first flow for ever brakes, and the second - is for ever tired of waiting.
Use modm::rtos::Semaphore if you need to suspend the execution of a thread.
Sideeffects: Thread constructor disables the SysTickTimer until the Scheduler is called.
modm::rtos::Thread::Thread | ( | uint32_t | priority = 0 , |
uint16_t | stackDepth = minimalStackSize , |
||
const char * | name = nullptr |
||
) |
Create a Thread.
priority | Priority (default is 0) |
stackDepth | Stack size for the thread in bytes |
name | Name of the thread (only used for debugging, can be left empty) |
|
protectedpure virtual |
Worker function.
Must be implemented to never return (i.e. continuous loop)
void modm::rtos::Thread::setPriority | ( | uint32_t | priority | ) |
Set the priority of the thread.
Might cause a context switch if the priority is set to lower value than the highest priority of a thread ready to run.
|
inlinestaticprotected |
Delay for the number of ticks.
Use the MILLISECONDS macro to convert ticks to milliseconds:
ticks | Number of scheduler ticks to delay for |
|
inlinestaticprotected |
Force a context switch.
Gives control to other threads ready to run.