NiboRoboLib 3.6 - MThread Library
thread.h-Dateireferenz

Die zentrale Datei zum Multi-threading. Mehr ...

#include "cdll.h"
#include "mthread_conf.h"
#include <stdint.h>

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_tthread_getCurrent ()
 Die Funktion liefert den aktuellen Thread zurück.
 

Variablen

thread_t primaryThread
 
volatile thread_trunning_thread
 

Ausführliche Beschreibung

Die zentrale Datei zum Multi-threading.

Autor
Nils Springob (nils@.nosp@m.nica.nosp@m.i-sys.nosp@m.tems.nosp@m..de)

Dokumentation der Funktionen

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.

Rückgabe
: Die Funktion gibt den Wert 1 zurück wenn der Timer abgelaufen ist und den Wert 0 wenn ein Signal gesendet wurde.
void thread_yield ( )

Die Funktion generiert bei Bedarf einen manuellen Kontextwechsel.

Sie ermöglich kooperatives Multithreading.