aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Tran <[email protected]>2025-03-29 02:45:48 -0500
committerMatthew Tran <[email protected]>2025-03-29 03:52:00 -0500
commit034e9fc218f1a348f451f56a5b9f3941fc046b1a (patch)
treec7d366b388eaee60fa7f8ebb5a077bf42df20898
parent35b353ab948256f4ae959767a7652c24bd42cd57 (diff)
Move macro helper functions to embassy-executor
-rw-r--r--embassy-executor-macros/src/macros/task.rs35
-rw-r--r--embassy-executor/src/lib.rs26
2 files changed, 29 insertions, 32 deletions
diff --git a/embassy-executor-macros/src/macros/task.rs b/embassy-executor-macros/src/macros/task.rs
index e5523c5cd..91d6beee8 100644
--- a/embassy-executor-macros/src/macros/task.rs
+++ b/embassy-executor-macros/src/macros/task.rs
@@ -145,35 +145,6 @@ pub fn run(args: TokenStream, item: TokenStream) -> TokenStream {
145 }; 145 };
146 #[cfg(not(feature = "nightly"))] 146 #[cfg(not(feature = "nightly"))]
147 let mut task_outer_body = quote! { 147 let mut task_outer_body = quote! {
148 // We use Fut instead of F::Fut because F::Fut causes the compiler to generate some ugly
149 // unrelated errors when the task has a compile error.
150 const fn __task_pool_size<F, Args, Fut>(_: F) -> usize
151 where
152 F: #embassy_executor::_export::TaskFn<Args, Fut = Fut>,
153 Fut: ::core::future::Future + 'static,
154 {
155 ::core::mem::size_of::<
156 #embassy_executor::raw::TaskPool<Fut, POOL_SIZE>
157 >()
158 }
159 const fn __task_pool_align<F, Args, Fut>(_: F) -> usize
160 where
161 F: #embassy_executor::_export::TaskFn<Args, Fut = Fut>,
162 Fut: ::core::future::Future + 'static,
163 {
164 ::core::mem::align_of::<
165 #embassy_executor::raw::TaskPool<Fut, POOL_SIZE>
166 >()
167 }
168
169 const fn __task_pool_new<F, Args, Fut>(_: F) -> #embassy_executor::raw::TaskPool<Fut, POOL_SIZE>
170 where
171 F: #embassy_executor::_export::TaskFn<Args, Fut = Fut>,
172 Fut: ::core::future::Future + 'static,
173 {
174 #embassy_executor::raw::TaskPool::new()
175 }
176
177 const fn __task_pool_get<F, Args, Fut>(_: F) -> &'static #embassy_executor::raw::TaskPool<Fut, POOL_SIZE> 148 const fn __task_pool_get<F, Args, Fut>(_: F) -> &'static #embassy_executor::raw::TaskPool<Fut, POOL_SIZE>
178 where 149 where
179 F: #embassy_executor::_export::TaskFn<Args, Fut = Fut>, 150 F: #embassy_executor::_export::TaskFn<Args, Fut = Fut>,
@@ -184,9 +155,9 @@ pub fn run(args: TokenStream, item: TokenStream) -> TokenStream {
184 155
185 const POOL_SIZE: usize = #pool_size; 156 const POOL_SIZE: usize = #pool_size;
186 static POOL: #embassy_executor::_export::TaskPoolHolder< 157 static POOL: #embassy_executor::_export::TaskPoolHolder<
187 {__task_pool_size(#task_inner_ident)}, 158 {#embassy_executor::_export::task_pool_size::<_, _, _, POOL_SIZE>(#task_inner_ident)},
188 {__task_pool_align(#task_inner_ident)}, 159 {#embassy_executor::_export::task_pool_align::<_, _, _, POOL_SIZE>(#task_inner_ident)},
189 > = unsafe { ::core::mem::transmute(__task_pool_new(#task_inner_ident)) }; 160 > = unsafe { ::core::mem::transmute(#embassy_executor::_export::task_pool_new::<_, _, _, POOL_SIZE>(#task_inner_ident)) };
190 unsafe { __task_pool_get(#task_inner_ident)._spawn_async_fn(move || #task_inner_ident(#(#full_args,)*)) } 161 unsafe { __task_pool_get(#task_inner_ident)._spawn_async_fn(move || #task_inner_ident(#(#full_args,)*)) }
191 }; 162 };
192 163
diff --git a/embassy-executor/src/lib.rs b/embassy-executor/src/lib.rs
index 5485f6a6a..d6bd63665 100644
--- a/embassy-executor/src/lib.rs
+++ b/embassy-executor/src/lib.rs
@@ -59,6 +59,8 @@ pub mod _export {
59 use core::future::Future; 59 use core::future::Future;
60 use core::mem::MaybeUninit; 60 use core::mem::MaybeUninit;
61 61
62 use crate::raw::TaskPool;
63
62 pub trait TaskFn<Args>: Copy { 64 pub trait TaskFn<Args>: Copy {
63 type Fut: Future + 'static; 65 type Fut: Future + 'static;
64 } 66 }
@@ -116,6 +118,30 @@ pub mod _export {
116 } 118 }
117 } 119 }
118 120
121 pub const fn task_pool_size<F, Args, Fut, const POOL_SIZE: usize>(_: F) -> usize
122 where
123 F: TaskFn<Args, Fut = Fut>,
124 Fut: Future + 'static,
125 {
126 size_of::<TaskPool<Fut, POOL_SIZE>>()
127 }
128
129 pub const fn task_pool_align<F, Args, Fut, const POOL_SIZE: usize>(_: F) -> usize
130 where
131 F: TaskFn<Args, Fut = Fut>,
132 Fut: Future + 'static,
133 {
134 align_of::<TaskPool<Fut, POOL_SIZE>>()
135 }
136
137 pub const fn task_pool_new<F, Args, Fut, const POOL_SIZE: usize>(_: F) -> TaskPool<Fut, POOL_SIZE>
138 where
139 F: TaskFn<Args, Fut = Fut>,
140 Fut: Future + 'static,
141 {
142 TaskPool::new()
143 }
144
119 #[allow(private_bounds)] 145 #[allow(private_bounds)]
120 #[repr(transparent)] 146 #[repr(transparent)]
121 pub struct Align<const N: usize>([<Self as Alignment>::Archetype; 0]) 147 pub struct Align<const N: usize>([<Self as Alignment>::Archetype; 0])