diff options
| author | Henri Lunnikivi <heggggxa@gmail.com> | 2024-05-28 09:01:53 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-28 06:01:53 +0000 |
| commit | 9bfd5a3bb201dad2327f3347133d4098a67cd7fe (patch) | |
| tree | 169b2ef47fa6f5ae52fe2e95bd70631ccfecb6a4 /rtic-macros/src/analyze.rs | |
| parent | 6865b696161d32cd47e1ccbfac942c38385d6dfd (diff) | |
Improve error output for prios > dispatchers (#943)
* Improve error output for prios > dispatchers
* Update changelog
Diffstat (limited to 'rtic-macros/src/analyze.rs')
| -rw-r--r-- | rtic-macros/src/analyze.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/rtic-macros/src/analyze.rs b/rtic-macros/src/analyze.rs index 2227308..ab6abc0 100644 --- a/rtic-macros/src/analyze.rs +++ b/rtic-macros/src/analyze.rs @@ -24,7 +24,7 @@ impl ops::Deref for Analysis { // Assign an interrupt to each priority level pub fn app(analysis: analyze::Analysis, app: &App) -> Analysis { - let mut available_interrupt = app.args.dispatchers.clone(); + let mut available_dispatchers = app.args.dispatchers.clone(); // the set of priorities (each priority only once) let priorities = app @@ -35,12 +35,26 @@ pub fn app(analysis: analyze::Analysis, app: &App) -> Analysis { // map from priorities to interrupts (holding name and attributes) - let interrupts: BTreeMap<Priority, _> = priorities + let nonzero_priorities = priorities .iter() - .filter(|prio| **prio > 0) // 0 prio tasks are run in main + // 0 prio tasks are run in main + .filter(|prio| **prio > 0); + assert!( + available_dispatchers.len() >= nonzero_priorities.clone().count(), + "The number of dispatchers must be equal to or greater than the number of distinct task priorities." + ); + let interrupts: BTreeMap<Priority, _> = nonzero_priorities .copied() .rev() - .map(|p| (p, available_interrupt.pop().expect("UNREACHABLE"))) + .map(|p| { + ( + p, + available_dispatchers + .pop() + // EXPECT: covered by above assertion + .expect("UNREACHABLE"), + ) + }) .collect(); let max_async_prio = app |
