aboutsummaryrefslogtreecommitdiff
path: root/macros/src/analyze.rs
diff options
context:
space:
mode:
authorPer Lindgren <per.lindgren@ltu.se>2020-10-23 10:35:56 +0200
committerPer Lindgren <per.lindgren@ltu.se>2020-10-23 23:58:09 +0200
commit1c244a995d54332649c1643aa0a3178f169406e4 (patch)
treeef7676e7439ccf9407fcde998a654d9700f20524 /macros/src/analyze.rs
parent86699039e99229049ee3c739eaf860acc70a1bf7 (diff)
move dispatchers to app argument
Diffstat (limited to 'macros/src/analyze.rs')
-rw-r--r--macros/src/analyze.rs24
1 files changed, 12 insertions, 12 deletions
diff --git a/macros/src/analyze.rs b/macros/src/analyze.rs
index 2301167..6b26138 100644
--- a/macros/src/analyze.rs
+++ b/macros/src/analyze.rs
@@ -3,7 +3,7 @@ use std::collections::{BTreeMap, BTreeSet};
use rtic_syntax::{
analyze::{self, Priority},
- ast::App,
+ ast::{App, ExternInterrupt},
P,
};
use syn::Ident;
@@ -11,7 +11,7 @@ use syn::Ident;
/// Extend the upstream `Analysis` struct with our field
pub struct Analysis {
parent: P<analyze::Analysis>,
- pub interrupts: BTreeMap<Priority, Ident>,
+ pub interrupts: BTreeMap<Priority, (Ident, ExternInterrupt)>,
}
impl ops::Deref for Analysis {
@@ -22,23 +22,23 @@ impl ops::Deref for Analysis {
}
}
-// Assign an `extern` interrupt to each priority level
+// Assign an interrupt to each priority level
pub fn app(analysis: P<analyze::Analysis>, app: &App) -> P<Analysis> {
- let mut interrupts = BTreeMap::new();
+ // the set of priorities (each priority only once)
let priorities = app
.software_tasks
.values()
.map(|task| task.args.priority)
.collect::<BTreeSet<_>>();
- if !priorities.is_empty() {
- interrupts = priorities
- .iter()
- .cloned()
- .rev()
- .zip(app.extern_interrupts.keys().cloned())
- .collect();
- }
+ // map from priorities to interrupts (holding name and attributes)
+ let interrupts: BTreeMap<Priority, _> = priorities
+ .iter()
+ .cloned()
+ .rev()
+ .zip(&app.args.extern_interrupts)
+ .map(|(p, (id, ext))| (p, (id.clone(), ext.clone())))
+ .collect();
P::new(Analysis {
parent: analysis,