
RTIC Versus Embassy for Real Time Embedded Rust Compared
RTIC schedules interrupt driven tasks with compile time priorities; Embassy runs async tasks cooperatively. Compare the models, resource sharing, latency and when each fits.
Threads, channels, locks, atomics and Tokio, with a bias towards the bug you will hit at 3am.

RTIC schedules interrupt driven tasks with compile time priorities; Embassy runs async tasks cooperatively. Compare the models, resource sharing, latency and when each fits.

Blink an LED on a Raspberry Pi Pico in async Rust with Embassy: toolchain target, memory.x, probe-rs runner, the main task and a second task with a button.

Use std::sync::Mutex when the lock is never held across an await and tokio::sync::Mutex when it must be. The std one is faster and is the default choice.

Build a Markdown link checker in Rust: extract links with pulldown-cmark, check them concurrently with reqwest and a semaphore, retry, report and set exit codes.

Build a fast file finder in Rust: parallel directory walking with the ignore crate, glob and regex filters, size and type predicates, and sorted deterministic output.

Tokio has four channel types: mpsc, oneshot, broadcast and watch. Pick by how many senders and receivers you have and whether late messages matter.

Build a chat room over WebSockets in Axum 0.8, using a Tokio broadcast channel to fan messages out, two tasks per socket, size limits and an integration test that drives real clients.

tokio::time::timeout drops the future when time runs out, which is not the same as stopping the work behind it. Learn what actually gets cancelled.

Share a pool, config and caches with Axum's State extractor. Learn why the state must be Clone, when to use Arc and how to mutate shared data safely.

One blocking call inside an async task can freeze a worker thread. See how it happens, how to find it and the three fixes: spawn_blocking, a thread, or async APIs.

buffer_unordered runs up to N futures from a stream at once and yields results as they finish. See bounded fan out, error handling and how it differs from join_all.

A Stream is the async version of Iterator. See next().await, StreamExt adapters, creating streams from channels and iterators, and where Stream is headed.
We send one email when a new post is published. No spam.