单片机串口中断函数中,如果在里面时间过长,后面来的数据会被自动丢弃吗
2个回答
展开全部
不是自动丢弃,而是反复接收,导致后来的数据将先收到、未处理的数据给覆盖了。
例如对方发给你一串0x01、0x02、0x03,假如你中断函数太过磨叽,可能在将0x01从缓冲区中取出后、在处理的过程中又先后收到了0x02、0x03,那么0x03会把0x02覆盖掉,导致你下次再进入串口中断函数时只能取出0x03了。
因此中断函数务必简洁高效,只要不是火烧眉毛的判断/处理,一律应当扔到主循环体或常规任务中处理。
另外现在很多的单片机串口是具有硬件FIFO的,善用FIFO也会大大提高整个系统的中断效率。
例如对方发给你一串0x01、0x02、0x03,假如你中断函数太过磨叽,可能在将0x01从缓冲区中取出后、在处理的过程中又先后收到了0x02、0x03,那么0x03会把0x02覆盖掉,导致你下次再进入串口中断函数时只能取出0x03了。
因此中断函数务必简洁高效,只要不是火烧眉毛的判断/处理,一律应当扔到主循环体或常规任务中处理。
另外现在很多的单片机串口是具有硬件FIFO的,善用FIFO也会大大提高整个系统的中断效率。
展开全部
首先不允许过长时间的中断处理函数。
实际情况里,进中断,关中断,处理,再开中断。这种处理方式也有。
尽量用标志位方式处理,弄短处理函数。
中断-中断函数(中断-中断函数(中断-中断函数)),这样一直再入到单片机资源耗尽。
追问
你说的是不允许,要是真的发生了呢,比如说我在接受到第一个字节的数据后,在串口中断函数中延时10s,我想知道会发生什么,我后面的数据还能接收到吗
追答
中断-中断函数(中断-中断函数(中断-中断函数)),这样一直再入到单片机资源耗尽(等于死机)。
所以实际上你根本不知道他收到了没,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询