Hi Dave:
I think your circular buffer solution can match your requirement, it is a great solution.
If you need to consider message passing, I think you need to consider the number of message queues used, frequency of sending messages, and the various sizes of messages used. Base on this, I recommend you to use full feature message passing, not light weight message passing.
There are two types of message pools available to you and one is called system pools. When a task creates a system pool, all tasks in your application have access to it and any task can allocate a message from a system pool. You can have multiple system pool provided you have a variety of buffer sizes in your system if you wish, so you aren't consuming a large block of memory to send a short message. All the system pool are linked together automatically by mqx , and when the task uses the _msg_alloc_system call, you returns a pointer to the minimum message buffer size that it needs, mqx will start with the smallest buffer sized pool and allocate a buffer from the first pool whose buffer is large enough. This is called allocation on the best fit basis which means you are not allocating a larger buffer to send a small message.
The other message pool is private pool, it is not linked together
I recommend you use system memory pool
We have demo the following folder, but this demo is based on private message pool.
C:\Freescale\Freescale_MQX_4_2\mqx\examples\msg
Compare your circular buffer solution and message passing, the later have more receive options, such as timeout, peek etc. It depends on your requirements, there is no general rule to follow.
Regards
Daniel