aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/src/raw/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-executor/src/raw/mod.rs')
-rw-r--r--embassy-executor/src/raw/mod.rs52
1 files changed, 12 insertions, 40 deletions
diff --git a/embassy-executor/src/raw/mod.rs b/embassy-executor/src/raw/mod.rs
index ebabee1ba..3f93eae6f 100644
--- a/embassy-executor/src/raw/mod.rs
+++ b/embassy-executor/src/raw/mod.rs
@@ -18,6 +18,8 @@ mod state;
18 18
19#[cfg(feature = "integrated-timers")] 19#[cfg(feature = "integrated-timers")]
20mod timer_queue; 20mod timer_queue;
21#[cfg(feature = "trace")]
22mod trace;
21pub(crate) mod util; 23pub(crate) mod util;
22#[cfg_attr(feature = "turbowakers", path = "waker_turbo.rs")] 24#[cfg_attr(feature = "turbowakers", path = "waker_turbo.rs")]
23mod waker; 25mod waker;
@@ -31,8 +33,6 @@ use core::task::{Context, Poll};
31 33
32#[cfg(feature = "integrated-timers")] 34#[cfg(feature = "integrated-timers")]
33use embassy_time_driver::AlarmHandle; 35use embassy_time_driver::AlarmHandle;
34#[cfg(feature = "rtos-trace")]
35use rtos_trace::trace;
36 36
37use self::run_queue::{RunQueue, RunQueueItem}; 37use self::run_queue::{RunQueue, RunQueueItem};
38use self::state::State; 38use self::state::State;
@@ -352,8 +352,8 @@ impl SyncExecutor {
352 /// - `task` must NOT be already enqueued (in this executor or another one). 352 /// - `task` must NOT be already enqueued (in this executor or another one).
353 #[inline(always)] 353 #[inline(always)]
354 unsafe fn enqueue(&self, task: TaskRef) { 354 unsafe fn enqueue(&self, task: TaskRef) {
355 #[cfg(feature = "rtos-trace")] 355 #[cfg(feature = "trace")]
356 trace::task_ready_begin(task.as_ptr() as u32); 356 trace::task_ready_begin(self, &task);
357 357
358 if self.run_queue.enqueue(task) { 358 if self.run_queue.enqueue(task) {
359 self.pender.pend(); 359 self.pender.pend();
@@ -369,8 +369,8 @@ impl SyncExecutor {
369 pub(super) unsafe fn spawn(&'static self, task: TaskRef) { 369 pub(super) unsafe fn spawn(&'static self, task: TaskRef) {
370 task.header().executor.set(Some(self)); 370 task.header().executor.set(Some(self));
371 371
372 #[cfg(feature = "rtos-trace")] 372 #[cfg(feature = "trace")]
373 trace::task_new(task.as_ptr() as u32); 373 trace::task_new(self, &task);
374 374
375 self.enqueue(task); 375 self.enqueue(task);
376 } 376 }
@@ -400,14 +400,14 @@ impl SyncExecutor {
400 return; 400 return;
401 } 401 }
402 402
403 #[cfg(feature = "rtos-trace")] 403 #[cfg(feature = "trace")]
404 trace::task_exec_begin(p.as_ptr() as u32); 404 trace::task_exec_begin(self, &p);
405 405
406 // Run the task 406 // Run the task
407 task.poll_fn.get().unwrap_unchecked()(p); 407 task.poll_fn.get().unwrap_unchecked()(p);
408 408
409 #[cfg(feature = "rtos-trace")] 409 #[cfg(feature = "trace")]
410 trace::task_exec_end(); 410 trace::task_exec_end(self, &p);
411 411
412 // Enqueue or update into timer_queue 412 // Enqueue or update into timer_queue
413 #[cfg(feature = "integrated-timers")] 413 #[cfg(feature = "integrated-timers")]
@@ -430,8 +430,8 @@ impl SyncExecutor {
430 } 430 }
431 } 431 }
432 432
433 #[cfg(feature = "rtos-trace")] 433 #[cfg(feature = "trace")]
434 trace::system_idle(); 434 trace::executor_idle(self)
435 } 435 }
436} 436}
437 437
@@ -593,31 +593,3 @@ impl embassy_time_queue_driver::TimerQueue for TimerQueue {
593 593
594#[cfg(feature = "integrated-timers")] 594#[cfg(feature = "integrated-timers")]
595embassy_time_queue_driver::timer_queue_impl!(static TIMER_QUEUE: TimerQueue = TimerQueue); 595embassy_time_queue_driver::timer_queue_impl!(static TIMER_QUEUE: TimerQueue = TimerQueue);
596
597#[cfg(all(feature = "rtos-trace", feature = "integrated-timers"))]
598const fn gcd(a: u64, b: u64) -> u64 {
599 if b == 0 {
600 a
601 } else {
602 gcd(b, a % b)
603 }
604}
605
606#[cfg(feature = "rtos-trace")]
607impl rtos_trace::RtosTraceOSCallbacks for Executor {
608 fn task_list() {
609 // We don't know what tasks exist, so we can't send them.
610 }
611 #[cfg(feature = "integrated-timers")]
612 fn time() -> u64 {
613 const GCD_1M: u64 = gcd(embassy_time_driver::TICK_HZ, 1_000_000);
614 embassy_time_driver::now() * (1_000_000 / GCD_1M) / (embassy_time_driver::TICK_HZ / GCD_1M)
615 }
616 #[cfg(not(feature = "integrated-timers"))]
617 fn time() -> u64 {
618 0
619 }
620}
621
622#[cfg(feature = "rtos-trace")]
623rtos_trace::global_os_callbacks! {Executor}