From 8fc7a474a192c04e95550b70dbfdd9e30b7aa4e3 Mon Sep 17 00:00:00 2001 From: Thom van der Steenhoven Date: Tue, 5 Mar 2024 12:57:25 +0100 Subject: [PATCH] Fix linking error on FreeRTOS when using portYIELD_FROM_ISR --- erpc_c/port/erpc_threading_freertos.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/erpc_c/port/erpc_threading_freertos.cpp b/erpc_c/port/erpc_threading_freertos.cpp index afef5e9d..f224bc6c 100644 --- a/erpc_c/port/erpc_threading_freertos.cpp +++ b/erpc_c/port/erpc_threading_freertos.cpp @@ -14,6 +14,15 @@ #if ERPC_THREADS_IS(FREERTOS) +// The portYIELD_FROM_ISR() macro declares a variable called +// ulPortYieldRequired. FreeRTOS assumes ulPortYieldRequired is in the +// global namespace. To prevent linking errors, portYIELD_FROM_ISR() +// should not be called from within a namespace. +inline void ErpcPortYieldFromISR(BaseType_t &higher_priority_task_woken) +{ + portYIELD_FROM_ISR(higher_priority_task_woken); +} + using namespace erpc; //////////////////////////////////////////////////////////////////////////////// @@ -248,7 +257,7 @@ void Semaphore::putFromISR(void) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; (void)xSemaphoreGiveFromISR(m_sem, &xHigherPriorityTaskWoken); - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + ErpcPortYieldFromISR(xHigherPriorityTaskWoken); } bool Semaphore::get(uint32_t timeoutUsecs)