Description
This program demonstrates the synchronisation between several threads with signals. It uses one core and a kernel.
There are four threads:
- Thread 0: the usual blinker, period-triggered, “heartbeat” indicator
- Threads 1 and 2: running the same code, they simply await a signal from thread 3, print a message, and await again. That is, these two threads are not triggered by periodic timing, but the reception of the signal. Both threads await the same signal.
- Thread 3: periodically send the awaited signal.
Since both receiving threads 1 and 2 are awaiting the same signal, they take turns receiving it. There’s a variant, commented out, which sends the signal to both during the same cycle of thread 3.
Note: since the threads share one output terminal, the printed status messages need to be below the UART’s 32 char buffer size.
Output Terminal
See Set-up, one-terminal set-up.
Build and Run
Build module SignalSync
with Astrobe, and create and upload the UF2 file using abin2uf2
.
Set Astrobe’s memory options as listed, and the library search path as explained.