diff options
author | 2019-07-03 20:36:52 +0200 | |
---|---|---|
committer | 2019-07-03 20:36:52 +0200 | |
commit | 14d63f496118f4243f28ddf3218523aa36a80322 (patch) | |
tree | bf4f75bcf65b7728ca1eb25f775142f9d960584b | |
parent | be92041a592f65f38cee8475b61d35e7fcee3694 (diff) | |
download | rtic-14d63f496118f4243f28ddf3218523aa36a80322.tar.gz rtic-14d63f496118f4243f28ddf3218523aa36a80322.tar.zst rtic-14d63f496118f4243f28ddf3218523aa36a80322.zip |
fix (cross-core) initialization barriers
-rw-r--r-- | macros/src/codegen/post_init.rs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/macros/src/codegen/post_init.rs b/macros/src/codegen/post_init.rs index 3f1e4451..19773e45 100644 --- a/macros/src/codegen/post_init.rs +++ b/macros/src/codegen/post_init.rs @@ -25,8 +25,12 @@ pub fn codegen( if analysis.timer_queues.is_empty() { // cross-initialization barriers -- notify *other* cores that their resources have been // initialized - if analysis.initialization_barriers.contains_key(&core) { - let ib = util::init_barrier(core); + for (user, initializers) in &analysis.initialization_barriers { + if !initializers.contains(&core) { + continue; + } + + let ib = util::init_barrier(*user); let shared = if cfg!(feature = "heterogeneous") { Some(quote!( #[rtfm::export::shared] @@ -46,14 +50,12 @@ pub fn codegen( } // then wait until the other cores have initialized *our* resources - for (&initializer, users) in &analysis.initialization_barriers { - if users.contains(&core) { - let ib = util::init_barrier(initializer); + if analysis.initialization_barriers.contains_key(&core) { + let ib = util::init_barrier(core); - stmts.push(quote!( - #ib.wait(); - )); - } + stmts.push(quote!( + #ib.wait(); + )); } // cross-spawn barriers: wait until other cores are ready to receive messages |