This is a set of backends for pw_sync based on embOS v4.

Critical Section Lock Primitives

Mutex & TimedMutex

The embOS v4 backend for the Mutex and TimedMutex use OS_RSEMA as the underlying type. It is created using OS_CreateRSema as part of the constructors and cleaned up using OS_DeleteRSema in the destructors.


The embOS v4 backend for InterruptSpinLock is backed by a bool which permits these objects to detect accidental recursive locking.

This object uses OS_IncDI and OS_DecRI to mask interrupts which enables the critical section. In addition, OS_SuspendAllTasks and OS_ResumeAllSuspendedTasks are used to to prevent accidental thread context switches while the InterruptSpinLock is locked.

Signaling Primitives

ThreadNotification & TimedThreadNotification

The native embOS v4 implementation of its semaphores (OS_CSEMA) is very efficient, ergo we recommend using the binary semaphore backends for ThreadNotifications: - pw_sync:binary_semaphore_thread_notification_backend - pw_sync:binary_semaphore_timed_thread_notification_backend

BinarySemaphore & CountingSemaphore

The embOS v4 backends for the BinarySemaphore and CountingSemaphore use OS_CSEMA as the underlying type. It is created using OS_CreateCSema as part of the constructor and cleaned up using OS_DeleteCSema in the destructor.