aboutsummaryrefslogtreecommitdiff
path: root/macros/src/tests/multi.rs
diff options
context:
space:
mode:
authorGravatar Jorge Aparicio <jorge@japaric.io> 2019-09-15 17:09:40 +0000
committerGravatar GitHub <noreply@github.com> 2019-09-15 17:09:40 +0000
commit4ff28e9d13e845abf39c662643ae2ff5df57ec16 (patch)
tree7d9770cd357e584d85ef6ddc32bddd1a937d1020 /macros/src/tests/multi.rs
parentfafeeb27270ef24fc3852711c6032f65aa7dbcc0 (diff)
parent7aa270cb92180abfc9102a69efdde378c3396b5e (diff)
downloadrtic-4ff28e9d13e845abf39c662643ae2ff5df57ec16.tar.gz
rtic-4ff28e9d13e845abf39c662643ae2ff5df57ec16.tar.zst
rtic-4ff28e9d13e845abf39c662643ae2ff5df57ec16.zip
Merge pull request #205 from japaric/heterogeneous
rtfm-syntax refactor + heterogeneous multi-core support
Diffstat (limited to 'macros/src/tests/multi.rs')
-rw-r--r--macros/src/tests/multi.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/macros/src/tests/multi.rs b/macros/src/tests/multi.rs
new file mode 100644
index 00000000..b55c451f
--- /dev/null
+++ b/macros/src/tests/multi.rs
@@ -0,0 +1,59 @@
+use quote::quote;
+use rtfm_syntax::Settings;
+
+#[test]
+fn analyze() {
+ let mut settings = Settings::default();
+ settings.parse_cores = true;
+ settings.parse_extern_interrupt = true;
+
+ let (app, analysis) = rtfm_syntax::parse2(
+ quote!(device = pac, cores = 2),
+ quote!(
+ const APP: () = {
+ #[task(core = 0, priority = 1)]
+ fn a(_: a::Context) {}
+
+ #[task(core = 0, priority = 2)]
+ fn b(_: b::Context) {}
+
+ #[task(core = 1, priority = 1)]
+ fn c(_: c::Context) {}
+
+ #[task(core = 1, priority = 2)]
+ fn d(_: d::Context) {}
+
+ // first interrupt is assigned to the highest priority dispatcher
+ extern "C" {
+ #[core = 0]
+ fn B();
+
+ #[core = 0]
+ fn A();
+
+ #[core = 1]
+ fn A();
+
+ #[core = 1]
+ fn C();
+ }
+ };
+ ),
+ settings,
+ )
+ .unwrap();
+
+ let analysis = crate::analyze::app(analysis, &app);
+
+ // first core
+ let interrupts0 = &analysis.interrupts[&0];
+ assert_eq!(interrupts0.len(), 2);
+ assert_eq!(interrupts0[&2].to_string(), "B");
+ assert_eq!(interrupts0[&1].to_string(), "A");
+
+ // second core
+ let interrupts1 = &analysis.interrupts[&1];
+ assert_eq!(interrupts1.len(), 2);
+ assert_eq!(interrupts1[&2].to_string(), "A");
+ assert_eq!(interrupts1[&1].to_string(), "C");
+}