If you've just finished reading the previous chapter, you've likely picked up on the fact that there are many techniques that can be used to create quality code at one time and then reuse that same code across multiple projects. Just like using layers of abstractions is a technique that increases the likelihood of reusing code across multiple hardware platforms, using queues as interfaces also increases the likelihood that code will be used for more than just one project.
The concepts presented in this chapter aren't limited to queues—they also apply to stream and message buffers. However, since queues have been around since the beginning of FreeRTOS (and are the most commonly available primitive), we'll use them in our examples. Let's take a look at why using queues is a good idea.