85 lines
2.6 KiB
Rust
85 lines
2.6 KiB
Rust
#![allow(unused)]
|
|
use crate::raw::{SyncExecutor, TaskRef};
|
|
|
|
#[cfg(not(feature = "rtos-trace"))]
|
|
extern "Rust" {
|
|
fn _embassy_trace_task_new(executor_id: u32, task_id: u32);
|
|
fn _embassy_trace_task_exec_begin(executor_id: u32, task_id: u32);
|
|
fn _embassy_trace_task_exec_end(excutor_id: u32, task_id: u32);
|
|
fn _embassy_trace_task_ready_begin(executor_id: u32, task_id: u32);
|
|
fn _embassy_trace_executor_idle(executor_id: u32);
|
|
}
|
|
|
|
#[inline]
|
|
pub(crate) fn task_new(executor: &SyncExecutor, task: &TaskRef) {
|
|
#[cfg(not(feature = "rtos-trace"))]
|
|
unsafe {
|
|
_embassy_trace_task_new(executor as *const _ as u32, task.as_ptr() as u32)
|
|
}
|
|
|
|
#[cfg(feature = "rtos-trace")]
|
|
rtos_trace::trace::task_new(task.as_ptr() as u32);
|
|
}
|
|
|
|
#[inline]
|
|
pub(crate) fn task_ready_begin(executor: &SyncExecutor, task: &TaskRef) {
|
|
#[cfg(not(feature = "rtos-trace"))]
|
|
unsafe {
|
|
_embassy_trace_task_ready_begin(executor as *const _ as u32, task.as_ptr() as u32)
|
|
}
|
|
#[cfg(feature = "rtos-trace")]
|
|
rtos_trace::trace::task_ready_begin(task.as_ptr() as u32);
|
|
}
|
|
|
|
#[inline]
|
|
pub(crate) fn task_exec_begin(executor: &SyncExecutor, task: &TaskRef) {
|
|
#[cfg(not(feature = "rtos-trace"))]
|
|
unsafe {
|
|
_embassy_trace_task_exec_begin(executor as *const _ as u32, task.as_ptr() as u32)
|
|
}
|
|
#[cfg(feature = "rtos-trace")]
|
|
rtos_trace::trace::task_exec_begin(task.as_ptr() as u32);
|
|
}
|
|
|
|
#[inline]
|
|
pub(crate) fn task_exec_end(executor: &SyncExecutor, task: &TaskRef) {
|
|
#[cfg(not(feature = "rtos-trace"))]
|
|
unsafe {
|
|
_embassy_trace_task_exec_end(executor as *const _ as u32, task.as_ptr() as u32)
|
|
}
|
|
#[cfg(feature = "rtos-trace")]
|
|
rtos_trace::trace::task_exec_end();
|
|
}
|
|
|
|
#[inline]
|
|
pub(crate) fn executor_idle(executor: &SyncExecutor) {
|
|
#[cfg(not(feature = "rtos-trace"))]
|
|
unsafe {
|
|
_embassy_trace_executor_idle(executor as *const _ as u32)
|
|
}
|
|
#[cfg(feature = "rtos-trace")]
|
|
rtos_trace::trace::system_idle();
|
|
}
|
|
|
|
#[cfg(feature = "rtos-trace")]
|
|
impl rtos_trace::RtosTraceOSCallbacks for crate::raw::SyncExecutor {
|
|
fn task_list() {
|
|
// We don't know what tasks exist, so we can't send them.
|
|
}
|
|
fn time() -> u64 {
|
|
const fn gcd(a: u64, b: u64) -> u64 {
|
|
if b == 0 {
|
|
a
|
|
} else {
|
|
gcd(b, a % b)
|
|
}
|
|
}
|
|
|
|
const GCD_1M: u64 = gcd(embassy_time_driver::TICK_HZ, 1_000_000);
|
|
embassy_time_driver::now() * (1_000_000 / GCD_1M) / (embassy_time_driver::TICK_HZ / GCD_1M)
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "rtos-trace")]
|
|
rtos_trace::global_os_callbacks! {SyncExecutor}
|