#pragma once #include #include 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);