aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/timer_queue.rs
diff options
context:
space:
mode:
authorGravatar Emil Fresk <emil.fresk@gmail.com> 2022-06-20 14:54:17 +0200
committerGravatar Emil Fresk <emil.fresk@gmail.com> 2022-08-03 11:30:32 +0200
commit27b8aca673bf8ee81013d79cb9cdae59e8b391fd (patch)
tree9a3712fbff44c4d0e7fb30eecb995992093505cf /macros/src/codegen/timer_queue.rs
parentdd563e3cee36e8ebee7cb7c809125cdd9bfd7de6 (diff)
downloadrtic-27b8aca673bf8ee81013d79cb9cdae59e8b391fd.tar.gz
rtic-27b8aca673bf8ee81013d79cb9cdae59e8b391fd.tar.zst
rtic-27b8aca673bf8ee81013d79cb9cdae59e8b391fd.zip
Added intrusive linked list for the waker queue
Diffstat (limited to 'macros/src/codegen/timer_queue.rs')
-rw-r--r--macros/src/codegen/timer_queue.rs21
1 files changed, 5 insertions, 16 deletions
diff --git a/macros/src/codegen/timer_queue.rs b/macros/src/codegen/timer_queue.rs
index 513f78af..db6a9e3d 100644
--- a/macros/src/codegen/timer_queue.rs
+++ b/macros/src/codegen/timer_queue.rs
@@ -67,13 +67,7 @@ pub fn codegen(app: &App, analysis: &Analysis, _extra: &Extra) -> Vec<TokenStrea
.map(|(_name, task)| task.args.capacity as usize)
.sum();
let n_task = util::capacity_literal(cap);
- let n_worker: usize = app
- .software_tasks
- .iter()
- .map(|(_name, task)| task.is_async as usize)
- .sum();
- let n_worker = util::capacity_literal(n_worker);
- let tq_ty = quote!(rtic::export::TimerQueue<#mono_type, #t, #n_task, #n_worker>);
+ let tq_ty = quote!(rtic::export::TimerQueue<#mono_type, #t, #n_task>);
// For future use
// let doc = format!(" RTIC internal: {}:{}", file!(), line!());
@@ -84,7 +78,7 @@ pub fn codegen(app: &App, analysis: &Analysis, _extra: &Extra) -> Vec<TokenStrea
static #tq: rtic::RacyCell<#tq_ty> = rtic::RacyCell::new(
rtic::export::TimerQueue {
task_queue: rtic::export::SortedLinkedList::new_u16(),
- waker_queue: rtic::export::SortedLinkedList::new_u16(),
+ waker_queue: rtic::export::IntrusiveSortedLinkedList::new(),
}
);
));
@@ -148,7 +142,7 @@ pub fn codegen(app: &App, analysis: &Analysis, _extra: &Extra) -> Vec<TokenStrea
#[no_mangle]
#[allow(non_snake_case)]
unsafe fn #bound_interrupt() {
- while let Some(task_or_waker) = rtic::export::interrupt::free(|_|
+ while let Some((task, index)) = rtic::export::interrupt::free(|_|
if let Some(mono) = (&mut *#m_ident.get_mut()).as_mut() {
(&mut *#tq.get_mut()).dequeue(|| #disable_isr, mono)
} else {
@@ -157,13 +151,8 @@ pub fn codegen(app: &App, analysis: &Analysis, _extra: &Extra) -> Vec<TokenStrea
core::hint::unreachable_unchecked()
})
{
- match task_or_waker {
- rtic::export::TaskOrWaker::Waker(waker) => waker.wake(),
- rtic::export::TaskOrWaker::Task((task, index)) => {
- match task {
- #(#arms)*
- }
- }
+ match task {
+ #(#arms)*
}
}