aboutsummaryrefslogtreecommitdiff
path: root/macros/src
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src')
-rw-r--r--macros/src/codegen/async_dispatchers.rs15
-rw-r--r--macros/src/codegen/module.rs11
-rw-r--r--macros/src/codegen/util.rs2
3 files changed, 13 insertions, 15 deletions
diff --git a/macros/src/codegen/async_dispatchers.rs b/macros/src/codegen/async_dispatchers.rs
index c8116654..f428cef0 100644
--- a/macros/src/codegen/async_dispatchers.rs
+++ b/macros/src/codegen/async_dispatchers.rs
@@ -45,23 +45,20 @@ pub fn codegen(app: &App, analysis: &Analysis) -> Vec<TokenStream2> {
let executor_run_ident = util::executor_run_ident(name);
let rq = util::rq_async_ident(name);
- let (rq_ty, rq_expr) = {
- (
- quote!(rtic::export::ASYNCRQ<(), 2>), // TODO: This needs updating to a counter instead of a queue
- quote!(rtic::export::Queue::new()),
- )
- };
items.push(quote!(
#[doc(hidden)]
#[allow(non_camel_case_types)]
#[allow(non_upper_case_globals)]
- static #rq: rtic::RacyCell<#rq_ty> = rtic::RacyCell::new(#rq_expr);
+ static #rq: core::sync::atomic::AtomicBool = core::sync::atomic::AtomicBool::new(false);
));
stmts.push(quote!(
if !(&*#exec_name.get()).is_running() {
- if let Some(()) = rtic::export::interrupt::free(|_| (&mut *#rq.get_mut()).dequeue()) {
+ // TODO Fix this to be compare and swap
+ if #rq.load(core::sync::atomic::Ordering::Relaxed) {
+ #rq.store(false, core::sync::atomic::Ordering::Relaxed);
+
// The async executor needs a static priority
#prio_name.get_mut().write(rtic::export::Priority::new(PRIORITY));
@@ -77,7 +74,7 @@ pub fn codegen(app: &App, analysis: &Analysis) -> Vec<TokenStream2> {
if (&mut *#exec_name.get_mut()).poll(|| {
#executor_run_ident.store(true, core::sync::atomic::Ordering::Release);
rtic::pend(#device::#enum_::#interrupt);
- }) && !rtic::export::interrupt::free(|_| (&*#rq.get_mut()).is_empty()) {
+ }) && #rq.load(core::sync::atomic::Ordering::Relaxed) {
// If the ready queue is not empty and the executor finished, restart this
// dispatch to check if the executor should be restarted.
rtic::pend(#device::#enum_::#interrupt);
diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs
index b4ad68aa..7bbfdf37 100644
--- a/macros/src/codegen/module.rs
+++ b/macros/src/codegen/module.rs
@@ -183,13 +183,14 @@ pub fn codegen(
#[doc(hidden)]
pub fn #internal_spawn_ident() -> Result<(), ()> {
unsafe {
- let r = rtic::export::interrupt::free(|_| (&mut *#rq.get_mut()).enqueue(()));
-
- if r.is_ok() {
+ // TODO: Fix this to be compare and swap
+ if #rq.load(core::sync::atomic::Ordering::Acquire) {
+ Err(())
+ } else {
+ #rq.store(true, core::sync::atomic::Ordering::Release);
rtic::pend(#device::#enum_::#interrupt);
+ Ok(())
}
-
- r
}
}));
diff --git a/macros/src/codegen/util.rs b/macros/src/codegen/util.rs
index 61bde98f..aa720c0e 100644
--- a/macros/src/codegen/util.rs
+++ b/macros/src/codegen/util.rs
@@ -154,7 +154,7 @@ pub fn local_resources_ident(ctxt: Context, app: &App) -> Ident {
/// Generates an identifier for a ready queue, async task version
pub fn rq_async_ident(async_task_name: &Ident) -> Ident {
- mark_internal_name(&format!("ASYNC_TACK_{}_RQ", async_task_name))
+ mark_internal_name(&format!("ASYNC_TASK_{}_RQ", async_task_name))
}
/// Suffixed identifier
ripts-now Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/examples/component/demo/public (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2022-06-28Fix Tailwind integration Typescript warning (#3732)Gravatar Victor 2-1/+6
2022-06-27[ci] formatGravatar bholmesdev 2-3/+3
2022-06-27Refactor: remove Deno shim to esbuild "banner" (#3734)Gravatar Ben Holmes 7-15/+22
2022-06-27[ci] formatGravatar FredKSchott 9-23/+25
2022-06-27update telemetry to support more anonymized project id (#3713)Gravatar Fred K. Schott 20-351/+311
2022-06-27SImplify "astro add" by removing confusing multi-select (#3715)Gravatar Fred K. Schott 13-258/+157