Block time in gatekeeper example 16 from book

Hi! Looking at example 16 in the book there is the prvPrintTask() function which is used to send strings to the gatekeeper task. This task uses xQueueSendToBack() with a block time of 0. The comments say that this block time is used because there should always be space in the queue. But I am not sure that this is safe (especially to use it in an example), because both prvPrintTask() instances have priorities higher than the gatekeeper task and use random blocking delays. Additionally there is an ISR also writing to the queue. Maybe it is unlikely that all delays happen to be very short 5 consecutive times (5 is the size of the queue), but on the other hand the gatekeeper uses printf which takes a lot of time so IMHO the queue may become full because the low priority gatekeeper may not get the chance to always empty the queue in time and if it was another type of application – queuing important items to the queue may fail. Or do I misunderstand something? Regards,
Anguel

Block time in gatekeeper example 16 from book

Sorry, in the post above of course I wanted to say that prvPrintTask() uses xQueueSendToBack() with a block time of 0.

Block time in gatekeeper example 16 from book

I think your analysis is in fact accurate.  While it is unlikely that the queue would become full, it is definitely not impossible.  Probably the comment should be edited.  In the example, posts to the queue that are not successful may pas unnoticed as the return value of the queue send function is not checked. Thanks for pointing this out.

Block time in gatekeeper example 16 from book

Thanks for the reply Richard! I am happy that I have understood how FreeRTOS works, at least in theory ;) Best regards,
Anguel