Message queues can be used in a number of different ways in embedded software design. You can write fairly complex applications in which you might use message queues alone. And using only message queues can reduce the size of your code (i.e., memory footprint) because many of the other services (semaphores, time delays, and event flags) can be simulated.