From ee02d995fec9b1ce751e671b28641771746ee2fe Mon Sep 17 00:00:00 2001 From: Gabriel Staples Date: Wed, 8 May 2024 15:26:55 -0700 Subject: [PATCH] list.c: improve documentation about initializing binary semaphores --- list.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/list.c b/list.c index fc99538b2..05f26a683 100644 --- a/list.c +++ b/list.c @@ -184,6 +184,15 @@ void vListInsert( List_t * const pxList, * 4) Using a queue or semaphore before it has been initialised or * before the scheduler has been started (are interrupts firing * before vTaskStartScheduler() has been called?). + * - This includes initializing binary semaphores before taking them. If + * you create one with `xSemaphoreCreateBinary()` or + * `xSemaphoreCreateBinaryStatic()`, you must call `xSemaphoreGive()` + * before calling `xSemaphoreTake(). See: + * https://freertos.org/xSemaphoreCreateBinaryStatic.html: + * > The semaphore is created in the 'empty' state, meaning the + * > semaphore must first be given using the xSemaphoreGive() API + * > function before it can subsequently be taken (obtained) using the + * > xSemaphoreTake() function. * 5) If the FreeRTOS port supports interrupt nesting then ensure that * the priority of the tick interrupt is at or below * configMAX_SYSCALL_INTERRUPT_PRIORITY.