forked from haraldwolff/avr-fw-modules
30 lines
562 B
C
30 lines
562 B
C
|
#pragma once
|
||
|
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/threads.h>
|
||
|
|
||
|
struct mutex
|
||
|
{
|
||
|
uint8_t locked;
|
||
|
THREAD *thread;
|
||
|
};
|
||
|
|
||
|
typedef struct mutex MUTEX;
|
||
|
|
||
|
APICALL mutex_lock(MUTEX *mutex);
|
||
|
uint8_t mutex_try_lock(MUTEX *mutex);
|
||
|
|
||
|
APICALL mutex_lock_timeout(MUTEX *mutex,int32_t timeout);
|
||
|
|
||
|
APICALL mutex_release(MUTEX *mutex);
|
||
|
|
||
|
MUTEX* mutex_lock_indirect(volatile MUTEX *mutex);
|
||
|
void mutex_release_indirect(volatile MUTEX **mutex);
|
||
|
|
||
|
|
||
|
#define MUTEXED(pmutex) \
|
||
|
volatile MUTEX *___mutex __attribute__((__cleanup__(mutex_release_indirect))) = mutex_lock_indirect(pmutex);
|
||
|
|
||
|
|
||
|
|