我开始做了一个Rust 的节目,我想要能够得到一些瞬间过go 的时间.下面是STD图书馆如何做到这一点.

use std::time::{Duration, Instant};
use std::thread::sleep;

fn main() {
   let now = Instant::now();

   // we sleep for 2 seconds
   sleep(Duration::new(2, 0));
   // it prints '2'
   println!("{}", now.elapsed().as_secs());
}

我没有带 rust 的性传播疾病,我怎么才能避开这个问题呢?我正在使用stm32f1xx HAL和stm32f103c8t6.我试着看了一下HAL中与定时器相关的各种模块,以及embedded time crate.但我没办法让任何东西发挥作用.任何帮助都将不胜感激.

我从其他人做过的松散相关的事情中拼凑了一些随机的代码行.

let mut counter = Timer::new(dp.TIM2, &clocks).counter_us();
counter.start(1_000_000_u32.micros()).unwrap();
let mut timer = Timer::syst(cp.SYST, &clocks);
let mut counter = Timer::counter_us(timer);

但是我甚至不能没有错误地初始化计数器,即使相关的函数、 struct 等都应该导入.

error[E0599]: no function or associated item named `new` found for struct `Timer` in the current scope
  --> src/main.rs:87:30
   |
87 |     let mut counter = Timer::new(dp.TIM2, &clocks).counter_us();
   |                              ^^^ function or associated item not found in `Timer<_>`

use panic_halt as _;

use cortex_m_rt::entry;
use embedded_hal::digital::v2::OutputPin;
use stm32f1xx_hal as hal;
use hal::{pac, TIM2, timer::Timer, delay::Delay, prelude::*};

use rtt_target::{rprintln, rtt_init_print};

推荐答案

像这样的东西听起来怎么样?


let some_clock = SomeClock;
let start = some_clock.try_now().unwrap();

// Do something

let duration = some_clock.try_now().unwrap() - start;

这几乎就是documentation强所显示的情况.您有实现embedded_time::Clock特征的 struct 吗?

不然的话,用MonoTimer美元怎么样?

Rust相关问答推荐

如何从Rust记录WASM堆内存使用情况?

如何导出 rust 色二进制文件中的符号

如何为utoipa中的可选查询参数生成OpenAPI模式?

限制未使用的泛型导致编译错误

闭包不会发送,即使它只捕获发送变量

有没有一种惯用的方法来判断VEC中是否存在变体?

如何轮询 Pin>?

使用 select 处理 SIGINT 和子等待!无阻塞

如何将 struct 数组放置在另一个 struct 的末尾而不进行内存分段

具有多个键的 HashMap

如何在 Rust 中将函数项变成函数指针

decltype、dyn、impl traits,重构时如何声明函数的返回类型

为什么 Rust 的临时值有时有参考性有时没有?

如何限制通用 const 参数中允许的值?

打印 `format_args!` 时borrow 时临时值丢失

更好的方法来模式匹配带有 Rust 的窥视孔装配说明窗口?

TcpStream::connect - 匹配武器具有不兼容的类型

在 Rust 中枚举字符串的最佳方式? (字符()与 as_bytes())

带有库+多个二进制文件的Cargo 项目,二进制文件由多个文件组成?

令人困惑的错误消息? (解包运算符)