In the previous chapter, the task was introduced. Toward the end, we looked at examples of preemptive scheduling for multiple tasks in the system and the fact that a task will run whenever it isn't waiting on something (in the blocked state) and can do something useful. In this chapter, the core mechanisms for task signaling and inter-task communication will be briefly introduced. These primitives are fundamental to event-driven parallel programming, which is the foundation of a well implemented RTOS-based application.
Rather than dive right into the FreeRTOS API, each primitive will be presented along with a few graphical examples and some suggestions on when each of the mechanisms can be used. Don't worry: in later chapters, we'll get into the nitty-gritty of working with the API. For now, let's concentrate on the...