OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3839|回复: 5

请教一个延迟函数:原子哥的delay函数

[复制链接]

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
发表于 2016-9-10 14:29:46 | 显示全部楼层 |阅读模式
1金钱
如果我直接用原子哥的延迟函数 delay
while(1)
{
delay_ms(1000);
}

我在这1秒钟的延迟函数执行过程中,如延迟了0.3s,被中断函数打断,去执行了其他的,用时0.2s。
中断结束,返回来。是继续延时剩下的1-0.3=0.7s?还是延时1-0.3-0.2=0.5s?
谢谢

最佳答案

查看完整内容[请看2#楼]

delay_ms()函数是对systick计数器做的查询计数,而systick是独立的不受中断影响。中断0.2s中systick仍然在计时,所以你的算法没错。 之所以不能精确定时是因为还有这种情况:比如你这中断刚好发生在0.9s的时候,这个时候执行中断0.2s,返回之后delay_ms()会判断已经到时间从而结束延时,这样你实际延时了1.1s而不是1s 所以查询法延时必然会有这样的问题。因此,第一是精确延时最好用定时器,第二是中断越短越好
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-9-10 14:29:47 | 显示全部楼层
滴丶滴 发表于 2016-9-10 16:18
谢谢
您的意思是:用SYSTICK做的延时,是要受到中断响应时间的影响1-0.3-0.2=0.5s对吧?
如果我是用定 ...

delay_ms()函数是对systick计数器做的查询计数,而systick是独立的不受中断影响。中断0.2s中systick仍然在计时,所以你的算法没错。
之所以不能精确定时是因为还有这种情况:比如你这中断刚好发生在0.9s的时候,这个时候执行中断0.2s,返回之后delay_ms()会判断已经到时间从而结束延时,这样你实际延时了1.1s而不是1s
所以查询法延时必然会有这样的问题。因此,第一是精确延时最好用定时器,第二是中断越短越好
回复

使用道具 举报

3

主题

144

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7344
金钱
7344
注册时间
2016-2-6
在线时间
1863 小时
发表于 2016-9-10 15:31:41 | 显示全部楼层
你要干啥用,如果需要精确定时就用定时器好了,这种后台阻断式的延时肯定会受到中断的影响。
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-9-10 16:18:38 | 显示全部楼层
pbxywyq 发表于 2016-9-10 15:31
你要干啥用,如果需要精确定时就用定时器好了,这种后台阻断式的延时肯定会受到中断的影响。

谢谢
您的意思是:用SYSTICK做的延时,是要受到中断响应时间的影响1-0.3-0.2=0.5s对吧?
如果我是用定时器做的delay_ms延时,被中断了,回来是1-0.3=0.7s是吗?
回复

使用道具 举报

44

主题

298

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2016-9-9
在线时间
84 小时
发表于 2016-9-10 16:27:25 | 显示全部楼层
滴丶滴 发表于 2016-9-10 16:18
谢谢
您的意思是:用SYSTICK做的延时,是要受到中断响应时间的影响1-0.3-0.2=0.5s对吧?
如果我是用定 ...

我用单片机试过,单片机的逻辑是,从0.4秒开始,继续
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
 楼主| 发表于 2016-9-12 09:44:02 | 显示全部楼层
yyx112358 发表于 2016-9-10 14:29
delay_ms()函数是对systick计数器做的查询计数,而systick是独立的不受中断影响。中断0.2s中systick仍然 ...

您好,谢谢。
如果我用定时器自己写个延时函数,那我运行0.3s,中断0.2s。返回来还是从0.3s时候继续延时?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 12:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表