本帖最后由 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毫秒以上才能有效吧?这样想对吗?
就像我不能用只有厘米刻度的尺子去量毫米一样
如果是这样的话,我需要增加精度是不是可以把中断配置得频密一些?
但是中断本身应该也消耗系统时间的吧,过分频密是否也会做成精度丢失?
因为基础学的不是很好,希望大神能讲解一下,哈,谢谢了~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>