Projekte
workwind
Multitasking optimiert
semaphore.h
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
Multitask...optimiert
cdll.c
cdll.h
condition.c
condition.h
main.c
mutex.c
mutex.h
scheduler.S
semaphore.c
semaphore.h
thread.c
thread.h
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7426 private projects
385 public projects
16180353 lines compiled
58212 builds
NIBO
@
multitasking_opt/semaphore.h [read only]
#ifndef SEMAPHORE_H #define SEMAPHORE_H #include "thread.h" /** * Semaphoren sind die klassische Methode um in Multitasking Systemen auf Resourcen zuzugreifen. * Jeder signal() Aufruf erzeugt dabei eine virtuelle Resource, jeder acquire() Aufruf verbraucht eine * Resource. Sollten gerade keine Resourcen mehr vorhanden sein wartet der acquire() Aufruf solange, bis * wieder eine Verfügbar ist. * Beispiel: * Ein Büro mit 20 Computern und 5 Druckern. Jeder Druckauftrag von einem Computer ist ein signal() Aufruf. * Die Drucker warten jeweils mit einem acquire() Aufruf auf einen Auftrag. Kommt ein neuer Druckauftrag dann * wird ein acquire() Aufruf erfolgreich zurückkehren. Ist ein Drucker fertig ruft er wieder acquire auf um * einen weiteren Auftrag zu bekommen. */ typedef struct _semaphore_s { cdll_t waiting_threads; uint16_t counter; } semaphore_t; /** * */ void semaphore_init(semaphore_t * semaphore); /** * */ void semaphore_delete(semaphore_t * semaphore); /** * Wenn der Wert der Semaphore größer Null ist wird der Wert um ein verringert und der Aufruf kehr erfolgreich zurück. * Falls der Wert der Semaphore Null ist wird solange gewartet bis er sich erhöht hat. * Sollte die Semaphore innerhalb der gegebenen Zeit nicht aquiriert werden können liefert die Routine eine Null zurück. * @param timeout: Wert in Ticks / TO_POLL (nicht warten) / TO_INF (ewig warten) * @result 1=Erfolgreich / 0=Fehler */ uint8_t semaphore_acquire(semaphore_t * semaphore, uint16_t timeout); /** * Der Wert der Semaphore wird um eins erhöht, falls Threads warten werden sie benachrichtigt. */ void semaphore_signal(semaphore_t * semaphore); /** * Wenn der Wert der Semaphore größer Null ist wird der Wert um ein verringert und der Aufruf kehr erfolgreich zurück. * Ansonsten liefert er Null zurück. * @result 1=Erfolgreich / 0=Fehler */ uint8_t semaphore_acquireISR(semaphore_t * semaphore); /** * Der Wert der Semaphore wird um eins erhöht, falls Threads warten werden sie benachrichtigt. */ void semaphore_signalISR(semaphore_t * semaphore); #endif
Compiler results:
Werbung
Online
almeda92990951273114
dtsjada1842883129
elidabaylee669745
janinalomax603906209
jeanniebland8449
kimlindberg1853496