单片机串口中断函数中,如果在里面时间过长,后面来的数据会被自动丢弃吗
我来答
分享
举报
2个回答
高粉答主
推荐于2017-09-18 · 繁杂信息太多,你要学会辨别
关注
不是自动丢弃,而是反复接收,导致后来的数据将先收到、未处理的数据给覆盖了。
例如对方发给你一串0x01、0x02、0x03,假如你中断函数太过磨叽,可能在将0x01从缓冲区中取出后、在处理的过程中又先后收到了0x02、0x03,那么0x03会把0x02覆盖掉,导致你下次再进入串口中断函数时只能取出0x03了。
因此中断函数务必简洁高效,只要不是火烧眉毛的判断/处理,一律应当扔到主循环体或常规任务中处理。
另外现在很多的单片机串口是具有硬件FIFO的,善用FIFO也会大大提高整个系统的中断效率。
本回答由提问者推荐
6
评论
分享
举报
jmhyys
2014-07-16 · TA获得超过503个赞
关注
-
首先不允许过长时间的中断处理函数。
-
实际情况里,进中断,关中断,处理,再开中断。这种处理方式也有。
-
尽量用标志位方式处理,弄短处理函数。
-
中断-中断函数(中断-中断函数(中断-中断函数)),这样一直再入到单片机资源耗尽。
追问
你说的是不允许,要是真的发生了呢,比如说我在接受到第一个字节的数据后,在串口中断函数中延时10s,我想知道会发生什么,我后面的数据还能接收到吗
追答
中断-中断函数(中断-中断函数(中断-中断函数)),这样一直再入到单片机资源耗尽(等于死机)。 所以实际上你根本不知道他收到了没,