rCore

毫秒和微秒返回结果误差

需要实现的两个功能(TaskInfosys_get_time)需要不同精度的时间(毫秒和微秒),于是我就分别用了OS提供的这两个不同函数。
结果经过一番debug 发现这两个函数的返回值msus/1000之间有一定的时间差,原因出在如下部分:

pub fn get_time_ms() -> usize {
    time::read() / (CLOCK_FREQ / MSEC_PER_SEC)
}

pub fn get_time_us() -> usize {
    time::read() / (CLOCK_FREQ / MICRO_PER_SEC)
}

其中(CLOCK_FREQ / MSEC_PER_SEC)是12500
(CLOCK_FREQ / MICRO_PER_SEC)是12.5 -> 12
这个致命的取整导致两个函数除出来的结果不一致,并且很明显ms是准确的,而us有较大误差(4%)
具体来说,我的一个任务从50ms开始运行,在sleep 500ms之后来到550ms,但是这是用us计算出的550ms,实际上现在是530ms,只睡眠了480ms左右。

posted @ 2023-12-15 01:51  huyufeifei  阅读(23)  评论(0编辑  收藏  举报
试着放一个广告栏(虽然没有一分钱广告费)

『Flyable Heart 応援中!』 HHG 高苗京铃 闪十PSS 双六 電動伝奇堂 章鱼罐头制作组 はきか 祝姬 星降夜