If one uses xSemaphoreTake with portMAX_DELAY, is it worth checking the return result, assuming we know the semaphore handle to be valid? The question, of course, is what the appropriate course of action is should it fail. With a valid handle and portMAX_DELAY, is it realistically possible for the take to fail?
Now that depends :) If you have INCLUDE_vTaskSuspend defined as 1 then the function will only return it has taken the semaphore and you need not check the return value. If you have INCLUDE_vTaskSuspend defined as 0 then the call cannot block for ever and will return when portMAX_DELAY ticks has expire and you must check the return value although if you have ticks defined to be a 32bit type this can be days/months/years depending on the tick frequency. In the latter case the stype is //Wait on semaphore. while( xSemaphoreTake( semaphore, portMAX_DELAY ) != 1 ); //We now have the semaphore.
Glad you mentioned the INCLUDE_vTaskSuspend. I am using that, and had noticed that in the docs, but failed to mention it in my scenario. There didn’t seem to be a failure case (other than passing an invalid semaphore), so I thought a call with no error checking should be stylistically OK (unless a stray alpha particle flips a bit in your semaphore handle…)
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.