fsfw-from-zero/ws-ipc/README.md

26 lines
1.4 KiB
Markdown

# Inter-Process Communication (IPC) with the FSFW
IPC is a necessary tool to let software entities communicate with each other. In general, for
any Software, there are two primary ways for software entities to communicate with each other:
1. Shared Memory. If memory is shared between threads or tasks, memory access needs to be protected
with a lock, also commonly called Mutex.
2. Message Passing. Usually, OSes provide some way of passing messages between threads safely.
Ín this workshop, we will look at both available ways to perform IPC with the FSFW.
I recommend to read the thread and mutual exclusion chapters of the
[the concurrency chapter provided by the isocpp](https://isocpp.org/wiki/faq/cpp11-library-concurrency)
if you are completely new to concurrency in C++.
# 1. Sharing state between two threads
## Subtasks
1. Create two threads which run some tasks with a period of 50ms using the
[`std::thread`](https://en.cppreference.com/w/cpp/thread/thread) API
2. Introduce a static global `uint32_t` variable called `SHARED_VARIABLE`
3. Increment the variable in both threads, but ensure that the access
is protected by a [`std::mutex`](https://en.cppreference.com/w/cpp/thread/mutex).
You can also use the [`std::lock_guard`](https://en.cppreference.com/w/cpp/thread/lock_guard)
which is a [RAII-style](https://en.cppreference.com/w/cpp/language/raii) helper object.