定时中断“和平相处“问题

我是疑惑不管delay函数是否放在while(1)大循环里,怎么让它和定时中断“和平相处”。你说的如果把所有中断都停掉再去执行驱动时序,那定时器这段时间因为停摆不是会错过一些任务的执行了?(比如键盘扫描)。
还有一个问题没有提及,就是如果用定时器来做delay延时,因为不同的时候调用delay可能会需要长短不一的延时,而我上一个提问中说到,不能只定义一个累积定时中断变量,而是每个delay必须有一个独立定义的变量和标志位。是这样吗?

吴坚鸿回复:

(1)即使不关闭中断,delay函数和定时中断是天生“和平共处”的,你不用过于担心。因为定时中断的时间间隔是固定的,即使在执行delay函数的时候被中断了一会,也不会有影响,只要你根据实际延时时间的需求来修改delay函数内部的执行指令次数就可以。这个时候不要严格按照时间计算公式去算,要凭感觉和实际反馈的时间来调整。
(2)即使关闭了中断,也不会错过一些任务执行(比如按键扫描)。因为delay函数是用在偶尔的驱动时序上,在系统上不做长延时用。因此关闭定时中断的时间是很短的。
(3)定时器的叫计数延时,没错,不同的计数延时要不同的变量。而delay延时是死延时,不要把计数延时跟delay延时混为一谈。不要企图用定时器来做delay延时,否则就跟死延时delay没有什么差别的。计数延时是基于整个系统框架的,delay延时只是局限于某个内部驱动时序,需要一气呵成,不能执行其他非中断任务。而定时器延时可以边延时边干其它的事情,是并行处理的。

永不止步步 发表于01-24 15:32 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363741个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号