aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/CHANGELOG.md
blob: a36d270ba3a26463a369ba8af33edbf459e4d1b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

<!-- next-header -->
## Unreleased - ReleaseDate

- Added new metadata API for tasks
- Named main task when rtos-trace feature is enabled.
- Upgraded rtos-trace

## 0.9.1 - 2025-08-31

- Fixed performance regression on some ESP32 MCUs.

## 0.9.0 - 2025-08-26

- Added `extern "Rust" fn __embassy_time_queue_item_from_waker`
- Removed `TaskRef::dangling`
- Added `embassy-executor-timer-queue` as a dependency
- Moved the `TimeQueueItem` struct and `timer-item-payload-size-*` features (as `timer-item-size-X-words`) into `embassy-executor-timer-queue`

## 0.8.0 - 2025-07-31

- Added `SpawnToken::id`
- Task pools are now statically allocated on stable rust. All `task-arena-size-*` features have been removed and are no longer necessary.
- New trace hooks: `_embassy_trace_poll_start` & `_embassy_trace_task_end`
- Added task naming capability to tracing infrastructure
- Added `Executor::id` & `Spawner::executor_id`
- Disable `critical-section/std` for arch-std
- Added possibility to select an executor in `#[embassy_executor::main]`
- Fix AVR executor
- executor: Make state implementations and their conditions match
- Added support for Cortex-A and Cortex-R
- Added support for `-> impl Future<Output = ()>` in `#[task]`
- Fixed `Send` unsoundness with `-> impl Future` tasks
- Marked `Spawner::for_current_executor` as `unsafe`
- `#[task]` now properly marks the generated function as unsafe if the task is marked unsafe

## 0.7.0 - 2025-01-02

- Performance optimizations.
- Remove feature `integrated-timers`. Starting with `embassy-time-driver` v0.2, `embassy-time` v0.4 the timer queue is now part of the time driver, so it's no longer the executor's responsibility. Therefore, `embassy-executor` no longer provides an `embassy-time-queue-driver` implementation.
- Added the possibility for timer driver implementations to store arbitrary data in task headers. This can be used to make a timer queue intrusive list, similar to the previous `integrated-timers` feature. Payload size is controlled by the `timer-item-payload-size-X` features.
- Added `TaskRef::executor` to obtain a reference to a task's executor

## 0.6.3 - 2024-11-12

- Building with the `nightly` feature now works with the Xtensa Rust compiler 1.82.
- Compare vtable address instead of contents. Saves 44 bytes of flash on cortex-m.

## 0.6.2 - 2024-11-06

- The `nightly` feature no longer requires `nightly-2024-09-06` or newer.

## 0.6.1 - 2024-10-21

- Soundness fix: Deny using `impl Trait` in task arguments. This was previously accidentally allowed when not using the `nightly` feature,
  and could cause out of bounds memory accesses if spawning the same task mulitple times with different underlying types
  for the `impl Trait`. Affected versions are 0.4.x, 0.5.0 and 0.6.0, which have been yanked.
- Add an architecture-agnostic executor that spins waiting for tasks to run, enabled with the `arch-spin` feature.
- Update for breaking change in the nightly waker_getters API. The `nightly` feature now requires `nightly-2024-09-06` or newer.
- Improve macro error messages.

## 0.6.0 - 2024-08-05

- Add collapse_debuginfo to fmt.rs macros.
- initial support for AVR
- use nightly waker_getters APIs

## 0.5.1 - 2024-10-21

- Soundness fix: Deny using `impl Trait` in task arguments. This was previously accidentally allowed when not using the `nightly` feature,
  and could cause out of bounds memory accesses if spawning the same task mulitple times with different underlying types
  for the `impl Trait`. Affected versions are 0.4.x, 0.5.0 and 0.6.0, which have been yanked.

## 0.5.0 - 2024-01-11

- Updated to `embassy-time-driver 0.1`, `embassy-time-queue-driver 0.1`, compatible with `embassy-time v0.3` and higher.

## 0.4.0 - 2023-12-05

- Removed `arch-xtensa`. Use the executor provided by the HAL crate (`esp-hal`, `esp32s3-hal`, etc...) instead.
- Added an arena allocator for tasks, allowing using the `main` and `task` macros on Rust 1.75 stable. (it is only used if the `nightly` feature is not enabled. When `nightly` is enabled, `type_alias_impl_trait` is used to statically allocate tasks, as before).

## 0.3.3 - 2023-11-15

- Add `main` macro reexport for Xtensa arch.
- Remove use of `atomic-polyfill`. The executor now has multiple implementations of its internal data structures for cases where the target supports atomics or doesn't.

## 0.3.2 - 2023-11-06

- Use `atomic-polyfill` for `riscv32`
- Removed unused dependencies (static_cell, futures-util)

## 0.3.1 - 2023-11-01

- Fix spurious "Found waker not created by the Embassy executor" error in recent nightlies.

## 0.3.0 - 2023-08-25

- Replaced Pender. Implementations now must define an extern function called `__pender`.
- Made `raw::AvailableTask` public
- Made `SpawnToken::new_failed` public
- You can now use arbitrary expressions to specify `#[task(pool_size = X)]`

## 0.2.1 - 2023-08-10

- Avoid calling `pend()` when waking expired timers
- Properly reset finished task state with `integrated-timers` enabled
- Introduce `InterruptExecutor::spawner()`
- Fix incorrect critical section in Xtensa executor

## 0.2.0 - 2023-04-27

- Replace unnecessary atomics in runqueue
- add Pender, rework Cargo features.
- add support for turbo-wakers.
- Allow TaskStorage to auto-implement `Sync`
- Use AtomicPtr for signal_ctx, removes 1 unsafe.
- Replace unsound critical sections with atomics

## 0.1.1 - 2022-11-23

- Fix features for documentation

## 0.1.0 - 2022-11-23

- First release