![]() |
NiboRoboLib 3.6 - MThread Library
|
Die zentrale Datei zum Multi-threading. Mehr ...
gehe zum Quellcode dieser Datei
Datenstrukturen | |
struct | thread_t |
Makrodefinitionen | |
#define | THREAD_PRIO_HIGHEST 0 |
#define | THREAD_PRIO_LOWEST (MTHREAD_PRIO_MAX-1) |
#define | TO_POLL 0x0000 |
#define | TO_INF 0xffff |
#define | MS_TO_TICKS(ms) (((ms))/(1000/MTHREAD_FREQ)) |
#define | THREAD_FROM_RIVALS_CDLL(cdll) ((thread_t*)(((char*)cdll)-12)) |
Typdefinitionen | |
typedef void | thread_main_t (void *arg) |
Aufzählungen | |
enum | { THREAD_INIT = 0x00, THREAD_READY = 0x01, THREAD_WAIT = 0x02, THREAD_WAITTIME = 0x03, THREAD_TIMEOUT_READY = 0x04 } |
Funktionen | |
void | thread_startScheduler (uint8_t priority) |
Durch den Aufruf dieser Funktion wird das Multithreading gestartet. Mehr ... | |
void | thread_init (thread_t *thread, void *stack, uint16_t stack_size) |
Initialisiert die thread_t Datenstruktur mit den übergebenen Werten. Mehr ... | |
void | thread_start (thread_t *thread, thread_main_t *mainFunc, void *arg) |
Durch Aufruf der Funktion wird der Thread gestartet. Mehr ... | |
void | thread_delete (thread_t *thread) |
void | thread_yield () |
Die Funktion generiert bei Bedarf einen manuellen Kontextwechsel. Mehr ... | |
void | thread_wait () |
Der aktuelle Thread wartet solange bis er ein Signal bekommt (durch Aufruf von thread_signal). Mehr ... | |
uint8_t | thread_waitTimeout (uint16_t timeout) |
Der aktuelle Thread wartet solange bis er ein Signal bekommt (durch Aufruf von thread_signal) oder bis die angegebene Zeit abgelaufen ist. Mehr ... | |
void | thread_signal (thread_t *thread) |
Die Funktion sendet ein Signal an den angegebenen Thread. Mehr ... | |
void | thread_signalISR (thread_t *thread) |
Die Funktion sendet ein Signal an den angegebenen Thread aus einer Interruptroutine heraus. Mehr ... | |
void | thread_halt (thread_t *thread) |
Den Thread anhalten, der Thread kann nur durch ein Signal wieder aufgeweckt werden. Mehr ... | |
void | thread_changePriority (thread_t *thread, uint8_t priority) |
Die Funktion ändert die Priorität des angegebenen Threads. | |
void | thread_suppressScheduling () |
Die Funktion verhindert das wechseln des aktuellen Threads. Mehr ... | |
void | thread_allowScheduling () |
Die Funktion schaltet das Thread-Wechseln wieder ein. Mehr ... | |
static thread_t * | thread_getCurrent () |
Die Funktion liefert den aktuellen Thread zurück. | |
Variablen | |
thread_t | primaryThread |
volatile thread_t * | running_thread |
Die zentrale Datei zum Multi-threading.
void thread_allowScheduling | ( | ) |
Die Funktion schaltet das Thread-Wechseln wieder ein.
Nach mehrfachem Aufruf von thread_suppressScheduling muss auch thread_allowScheduling mehnrfach aufgerufen werden.
void thread_halt | ( | thread_t * | thread | ) |
Den Thread anhalten, der Thread kann nur durch ein Signal wieder aufgeweckt werden.
Die Funktion kann auch für einen Thread aufgerufen werden, der nur initialisiert, aber noch nicht gestartet wurde.
void thread_init | ( | thread_t * | thread, |
void * | stack, | ||
uint16_t | stack_size | ||
) |
Initialisiert die thread_t Datenstruktur mit den übergebenen Werten.
Der Thread wird mit der höchsten Priorität (= 0) eingerichtet. Der Thread wird noch nicht gestartet. Die Funktion darf auch schon vor dem Aufruf von thread_startScheduler aufgerufen werden.
void thread_signal | ( | thread_t * | thread | ) |
Die Funktion sendet ein Signal an den angegebenen Thread.
Wenn der Thread nicht wartet wird der Signalzähler des Threads um Eins erhöht.
void thread_signalISR | ( | thread_t * | thread | ) |
Die Funktion sendet ein Signal an den angegebenen Thread aus einer Interruptroutine heraus.
Wenn der Thread nicht wartet wird der Signalzähler des Threads um Eins erhöht. Die Funktion lößt keinen direkten Kontextwechsel aus!
void thread_start | ( | thread_t * | thread, |
thread_main_t * | mainFunc, | ||
void * | arg | ||
) |
Durch Aufruf der Funktion wird der Thread gestartet.
Die Funktion darf nur nach dem Aufruf von thread_startScheduler aufgerufen werden. Die thread_t Datenstruktur muss vorher mit thread_init initialiert worden sein! Der neue Thread wird mit dem Parameter arg aufgerufen: mainFunc(arg)
void thread_startScheduler | ( | uint8_t | priority | ) |
Durch den Aufruf dieser Funktion wird das Multithreading gestartet.
Die Funktion kehrt zurück im Kontext des primaryThread. Der primaryThread bekommt die übergebene Priorität zugewiesen.
void thread_suppressScheduling | ( | ) |
Die Funktion verhindert das wechseln des aktuellen Threads.
Die Funktion kann mehrfach aufgerufen werden, um das Thread-Wechseln wieder einzuschalten muss die Funktion thread_allowScheduling genauso häufig aufgerufen werden. Wenn blockierende Funktionen (thread_wait und thread_waitTimeout) aufgerufen werden wird der Scheduler für die Wartezeit wieder eingeschaltet!
void thread_wait | ( | ) |
Der aktuelle Thread wartet solange bis er ein Signal bekommt (durch Aufruf von thread_signal).
Vorab gesendete Signale werden gespeichert und mit berücksichtigt. Wenn bereits ein Signal gesendet wurde kehrt die Funktion direkt zurück und "verbraucht" das Signal.
uint8_t thread_waitTimeout | ( | uint16_t | timeout | ) |
Der aktuelle Thread wartet solange bis er ein Signal bekommt (durch Aufruf von thread_signal) oder bis die angegebene Zeit abgelaufen ist.
Vorab gesendete Signale werden gespeichert und mit berücksichtigt. Wenn bereits ein Signal gesendet wurde kehrt die Funktion direkt zurück und "verbraucht" das Signal.
void thread_yield | ( | ) |
Die Funktion generiert bei Bedarf einen manuellen Kontextwechsel.
Sie ermöglich kooperatives Multithreading.