 Let's begin another topic, inter-task communication. The tasks don't live alone. It would be pity if you run independent applications on a microcontroller that couldn't communicate, synchronize, and exchange the data. If you would need to manage them somehow in a shared memory, it would be a nightmare. That's why the RTOS defines a way how the tasks can exchange the data and different synchronization events. And they can as well fight for a limited resource. And they can guard the limited resource. So the Common API of the RTOS offers several different elements, like cues that allow to pass information from task to task or from interrupt to task. Semaphores that allow you to specify or to guard a number of resources with a limited amount. There is a possibility to notify a specific task, so you can send a notification event to wake it up. You can as well use mutexes where several different tasks can try to acquire it, and only the first one who acquires the mutex would be able to continue. And there are as well even groups that can synchronize the operation of the tasks from multiple resources, one of many or all of many.