xMessageBufferCreate() API - Meaning of xBufferSizeBytes

armandas wrote on Friday, February 08, 2019:

The xBufferSizeBytes parameter of the xMessageBufferCreate() needs to be manually increased by sizeof(size_t). Is there a good technical reason why this increment is not done internally?

E.g. inside xStreamBufferGenericCreate() we have an assert to check the buffer size:

		if( xIsMessageBuffer == pdTRUE )
		{
			/* Is a message buffer but not statically allocated. */
			ucFlags = sbFLAGS_IS_MESSAGE_BUFFER;
			configASSERT( xBufferSizeBytes > sbBYTES_TO_STORE_MESSAGE_LENGTH );
		}

when we could simply increment the size:

		if( xIsMessageBuffer == pdTRUE )
		{
			/* Is a message buffer but not statically allocated. */
			ucFlags = sbFLAGS_IS_MESSAGE_BUFFER;
			xBufferSizeBytes += sbBYTES_TO_STORE_MESSAGE_LENGTH;
		}

rtel wrote on Friday, February 08, 2019:

The way the parameter works is described on the API function’s
documentation page:

https://www.freertos.org/xMessageBufferCreate.html

The user needs to know how it works as, for example, if you wanted to
store two messages, just adding one additional lot of
sbBYTES_TO_STORE_MESSAGE_LENGTH bytes is not going to help (as two lots
would be needed), and possible just confuse. It is considered best to
let the application writer define the buffer’s size explicitly.

armandas wrote on Friday, February 08, 2019:

Thank you for the answer. I had missed the fact that you can store multiple messages in the buffer.