diff --git a/libraries/BLE/src/FreeRTOS.cpp b/libraries/BLE/src/FreeRTOS.cpp index a5f5ff72..9f4c1995 100644 --- a/libraries/BLE/src/FreeRTOS.cpp +++ b/libraries/BLE/src/FreeRTOS.cpp @@ -61,15 +61,13 @@ uint32_t FreeRTOS::getTimeSinceStart() { */ uint32_t FreeRTOS::Semaphore::wait(std::string owner) { log_v(">> wait: Semaphore waiting: %s for %s", toString().c_str(), owner.c_str()); - + if (m_usePthreads) { pthread_mutex_lock(&m_pthread_mutex); } else { xSemaphoreTake(m_semaphore, portMAX_DELAY); } - m_owner = owner; - if (m_usePthreads) { pthread_mutex_unlock(&m_pthread_mutex); } else { @@ -77,7 +75,6 @@ uint32_t FreeRTOS::Semaphore::wait(std::string owner) { } log_v("<< wait: Semaphore released: %s", toString().c_str()); - m_owner = std::string(""); return m_value; } // wait @@ -87,7 +84,8 @@ FreeRTOS::Semaphore::Semaphore(std::string name) { if (m_usePthreads) { pthread_mutex_init(&m_pthread_mutex, nullptr); } else { - m_semaphore = xSemaphoreCreateMutex(); + m_semaphore = xSemaphoreCreateBinary(); + xSemaphoreGive(m_semaphore); } m_name = name; @@ -111,6 +109,8 @@ FreeRTOS::Semaphore::~Semaphore() { */ void FreeRTOS::Semaphore::give() { log_v("Semaphore giving: %s", toString().c_str()); + m_owner = std::string(""); + if (m_usePthreads) { pthread_mutex_unlock(&m_pthread_mutex); } else { @@ -120,7 +120,6 @@ void FreeRTOS::Semaphore::give() { // FreeRTOS::sleep(10); // #endif - m_owner = std::string(""); } // Semaphore::give