By communication we mean:
Exchanging data is usually asynchronous: data producer may produce data at some time, while data consumer may try to consume data at another time.
Data exchange must be protected so that the consumer always gets consistent data.
It is desirable that a mechanism let the consumer know that there is some data to consume.
Usually:
queue_handle_t queue_create(int queue_length, int message_size)status_t queue_send(queue_handle_t qh, void *message, timeout_t timeout)status_t queue_receive(queue_handle_t qh, void *message, timeout_t timeout)status_t queue_delete(queue_handle_t qh)Using a queue
embedded-systems-for-ML/practice-sessions/15-Queue/README.md
fileA useful tool to prevent priority inversion and deadlocks
⇒ In many cases, it's better to use queues instead of mutexes or semaphores.
A common design pattern: to provide access to a shared resource, use a "server" task with a queue. Clients write their requests into the queue.
Time-stamped button presses
embedded-systems-for-ML/practice-sessions/16-All-button-presses/README.md
fileA log server
embedded-systems-for-ML/practice-sessions/17-Log-server/README.md
fileNote: this practice session is a little bit more challenging than the previous ones.