pumpitup 发表于 2016-5-28 12:02:16

关于"中断函数发生时millis()的数值将不会继续变化"

没明白是什么意思啊,难道是说,如果我使用了中断(外中断或者时间中断), millis()返回的值就不准确了么(与实际时间相比变小了?因为中断时不计时)?

zjz5717 发表于 2016-5-29 19:52:16

pumpitup 发表于 2016-5-28 21:51 static/image/common/back.gif
中断不是应该有优先级的么

如果时钟中断优先级比外中断高,那么在外中断执行的时候,也会插入时钟中断 ...

具体的优先级是:外部中断0,定时器0,外部中断1,定时器1,串口中断
当有中断触发时,优先处理先提出中断请求的函数,如果两个中断同时向cpu提出中断请求,则按照优先级顺序处理,当优先处理的中断结束之后,如果另外一个中断依旧被触发,则再执行其中断函数

主要是因为当AVR(cpu)进入中断之后,会关闭全局中断检测,不再受理其他中断函数的请求,直到当前中断执行完毕才会打开全局中断检测

你当然可以在中断函数中使用语句打开全局中断检测,但是这意味着cpu将同时处理多个中断,这是十分危险的,不建议这么干

zjz5717 发表于 2016-5-28 16:35:01

中断指的是,当满足触发中断的条件时,无论系统正在执行何种操作,都将跳转到你所设定的部分,执行完之后返回原位置继续执行。但是如果你正在使用mills计时器,也算是正在进行的操作,同样也会被暂停

pumpitup 发表于 2016-5-28 21:51:30

zjz5717 发表于 2016-5-28 16:35 static/image/common/back.gif
中断指的是,当满足触发中断的条件时,无论系统正在执行何种操作,都将跳转到你所设定的部分,执行完之后返 ...

中断不是应该有优先级的么

如果时钟中断优先级比外中断高,那么在外中断执行的时候,也会插入时钟中断,不就不会被暂停了?

zjz5717 发表于 2016-5-29 19:47:06

本帖最后由 zjz5717 于 2016-5-29 19:52 编辑

pumpitup 发表于 2016-5-28 21:51 static/image/common/back.gif
中断不是应该有优先级的么

如果时钟中断优先级比外中断高,那么在外中断执行的时候,也会插入时钟中断 ...

有优先级的,外部高于时钟
页: [1]
查看完整版本: 关于"中断函数发生时millis()的数值将不会继续变化"