延时函数一问

2019-08-13 19:09发布

本帖最后由 foodyou 于 2017-10-17 13:56 编辑

大家好,有这样的一段代码

[mw_shl_code=c,true]void delay_ms(uint32 delay)
{
    uint32 tick = timer_tick_count; // timer_tick_count每10毫秒1次中断,加1
    while(1)
    {
        if(timer_tick_count-tick>delay/10)

        break;
    }
}[/mw_shl_code]

因为对c语言学的不好,想问一下无符号位的正数除10会得出个什么结果?
一般用printf都是指明显示格式的,比如%u就只显示整数部分,但是因为里面牵涉条件判断
如果只比较整数部分,这样就会有误差是吧?那么表达式 delay/10 实际上在c里得出的是一个怎样的数值?
比如delay = 5, 能够精确延时5毫秒吗?
我自己理解是不行的,先不论 5/10 在c里的计算结果是一个整数0 还是一个确实的小数 0.5
还有那个  timer_tick_count 因为是根据系统设置每10毫秒增加1, 那么最小的时间精度应该在10毫秒
加上本身运行那些指令的时间,应该最少需要延时10毫秒以上才能有效吧?这样想对吗?
就像我不能用只有厘米刻度的尺子去量毫米一样
如果是这样的话,我需要增加精度是不是可以把中断配置得频密一些?
但是中断本身应该也消耗系统时间的吧,过分频密是否也会做成精度丢失?
因为基础学的不是很好,希望大神能讲解一下,哈,谢谢了~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
msq001
2019-08-14 01:00
// timer_tick_count每10毫秒1次中断,加1,  精度就是10毫秒了,精确延时5ms?不存在的!。至于你后面说的指令运行的时间,这个确实有,最多也就是while(1)加一个if判断的时间这个误差微乎其微,至于中断的频率,你自己看数据手册上面有时钟分频的最大值,按照手册来,就不会有出乎意料的事

一周热门 更多>