xwrust::xwos::swt

Struct Swt

source
pub struct Swt<T> { /* private fields */ }
Expand description

软件定时器对象结构体

Implementations§

source§

impl<T> Swt<T>

source

pub const fn new(d: T) -> Self

新建软件定时器对象

此方法是编译期方法。

§参数说明
  • d: 定时器附带的数据
§示例

软件定时器只能作为静态生命周期 static 的全局变量:

use xwrust::xwos::swt::*;
use xwrust::xwos::lock::spinlock::*;

// 创建一个带有自选锁的软件定时器
static SWT: Swt<Spinlock<u32>> = Swt::new(Spinlock::new(1));
source

pub fn once(&'static self, origin: XwTm, period: XwTm, cb: fn(_: &Swt<T>))

启动软件定时器,并且软件定时器只运行一次

软件定时器的超时时间由 origin + period 决定。 origin 是时间的起点, period 是时间的增量。

超时后,回调函数 cb 会被调用,且 cb 运行在中断上下文或中断底半部上下文。其中不可使用任何会导致阻塞睡眠的方法。

例如 Mutex::lock() , Sem::wait() , cthd::sleep() , println!() 等。

cb 只能是函数或不捕获任何东西的闭包。

§参数说明
  • origin: 时间的起点
  • period: 时间的增量
  • cb: 定时器回调函数
§示例
pub fn xwrust_example_swt() {
    SWT.once(xwtm::now(), xwtm::ms(200), |swt| {
        // 回调函数
    });
}
source

pub fn repeat(&'static self, origin: XwTm, period: XwTm, cb: fn(_: &Swt<T>))

启动软件定时器,并且软件定时器可重复运行

软件定时器的超时时间由 origin + period 决定。 origin 是时间的起点, period 是时间的增量。

超时后软件定时器会在超时的时间点上再次增加 period 重启软件定时器并执行回调函数 cb , 也就是 cb 会以 period 为周期重复执行。

回调函数 cb 运行在中断上下文或中断底半部上下文。其中不可使用任何会导致阻塞睡眠的方法。

例如 Mutex::lock() , Sem::wait() , cthd::sleep() , println!() 等。

cb 只能是函数或不捕获任何东西的闭包。

§参数说明
  • origin: 时间的起点
  • period: 时间的增量
  • cb: 定时器回调函数
§示例
pub fn xwrust_example_swt() {
    SWT.repeat(xwtm::now(), xwtm::ms(200), |swt| {
        // 回调函数
    });
}
source

pub fn stop(&'static self)

停止软件定时器

若软件定时器未到达超时时间,回调函数不会被调用。

Trait Implementations§

source§

impl<T> AsMut<T> for Swt<T>

source§

fn as_mut(&mut self) -> &mut T

Converts this type into a mutable reference of the (usually inferred) input type.
source§

impl<T> AsRef<T> for Swt<T>

source§

fn as_ref(&self) -> &T

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl<T> !Send for Swt<T>

source§

impl<T> Sync for Swt<T>

Auto Trait Implementations§

§

impl<T> !Freeze for Swt<T>

§

impl<T> !RefUnwindSafe for Swt<T>

§

impl<T> Unpin for Swt<T>
where T: Unpin,

§

impl<T> UnwindSafe for Swt<T>
where T: UnwindSafe,

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.