5 关于rt_thread_delay函数出现延时不准确的问题。

发布于 2021-03-20 15:49:21

代码如下:

int i=0;
rt_kprintf("1");
while(1)
{                        
     rt_thread_delay(rt_tick_from_millisecond(10));
     i++;
     if(i>500)
     {
    rt_kprintf("2");
    return;   
     }
}

我的RT_TICK_PER_SECOND宏定义是100
实际过程发现1和2之间用分析仪抓取时间间隔总是8S,甚至有时接近10S,我觉得挺不解的,而且我开了虚拟RTC,date命令得到的时候,我和手机比较了下,还是非常准确的,date跑10S,手机也是10S,date跑20S,手机也是20S。

说明时钟系统是正常的,为何delay会有这么大的误差呢。

查看更多

关注者
0
被浏览
158
4 个回答
aozima
aozima 2021-03-20
拒绝白嫖,拒绝键盘侠!

你直接在systick中断里面翻一下IO,
如果间隔不是10ms,说明你的晶振或主频不对。
如果这里是10ms没错,但误差较大,说明你有不合理的中断ISR占用了较多时间。

flashman2002
flashman2002 2021-03-20

关键是你使用了rt_kprintf语句打印的方式进行标记时间,这个语句本身就使用系统IO,占用不少系统节拍了。所以说这个测量方式本身就无法获得精准的结果。

HappyTime
HappyTime 2021-03-20

还是按照aozima大佬说的,看心跳时钟间隔对不对。

mysterywolf
mysterywolf 2021-03-20

有可能是比他还高优先级的任务卡得

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览