#async #hal #executor #driver #task #drivers #embassy

no-std embassy-executor

async/await executor designed for embedded usage

6 releases (3 breaking)

0.3.0 Aug 25, 2023
0.2.1 Aug 10, 2023
0.2.0 Apr 27, 2023
0.1.1 Nov 23, 2022
0.0.0 Oct 31, 2020

#378 in Embedded development

Download history 662/week @ 2023-06-11 1501/week @ 2023-06-18 1300/week @ 2023-06-25 1179/week @ 2023-07-02 784/week @ 2023-07-09 1287/week @ 2023-07-16 1488/week @ 2023-07-23 771/week @ 2023-07-30 934/week @ 2023-08-06 1455/week @ 2023-08-13 1056/week @ 2023-08-20 1534/week @ 2023-08-27 1041/week @ 2023-09-03 595/week @ 2023-09-10 1865/week @ 2023-09-17 2564/week @ 2023-09-24

6,206 downloads per month
Used in 13 crates

MIT/Apache

97KB
1.5K SLoC

embassy-executor

An async/await executor designed for embedded usage.

  • No alloc, no heap needed. Task futures are statically allocated.
  • No "fixed capacity" data structures, executor works with 1 or 1000 tasks without needing config/tuning.
  • Integrated timer queue: sleeping is easy, just do Timer::after(Duration::from_secs(1)).await;.
  • No busy-loop polling: CPU sleeps when there's no work to do, using interrupts or WFE/SEV.
  • Efficient polling: a wake will only poll the woken task, not all of them.
  • Fair: a task can't monopolize CPU time even if it's constantly being woken. All other tasks get a chance to run before a given task gets polled for the second time.
  • Creating multiple executor instances is supported, to run tasks with multiple priority levels. This allows higher-priority tasks to preempt lower-priority tasks.

Dependencies

~1.3–2.3MB
~46K SLoC