单片机串口中断函数中,如果在里面时间过长,后面来的数据会被自动丢弃吗?答案是会丢数。很多串口测试实例上位机发送成功,但是下位机接收失败

单片机串口中断函数中,如果在里面时间过长,后面来的数据会被自动丢弃吗

 我来答 

分享

 举报

2个回答

#热议# 夫妻之间该做到绝对坦诚吗?

百度网友b30480f 

高粉答主

 
推荐于2017-09-18 · 繁杂信息太多,你要学会辨别

关注

不是自动丢弃,而是反复接收,导致后来的数据将先收到、未处理的数据给覆盖了。

例如对方发给你一串0x01、0x02、0x03,假如你中断函数太过磨叽,可能在将0x01从缓冲区中取出后、在处理的过程中又先后收到了0x02、0x03,那么0x03会把0x02覆盖掉,导致你下次再进入串口中断函数时只能取出0x03了。

因此中断函数务必简洁高效,只要不是火烧眉毛的判断/处理,一律应当扔到主循环体或常规任务中处理。
另外现在很多的单片机串口是具有硬件FIFO的,善用FIFO也会大大提高整个系统的中断效率。

 本回答由提问者推荐

 6   

 评论 

分享

 举报

jmhyys
2014-07-16 · TA获得超过503个赞

关注

  1. 首先不允许过长时间的中断处理函数。

  2. 实际情况里,进中断,关中断,处理,再开中断。这种处理方式也有。

  3. 尽量用标志位方式处理,弄短处理函数。

  4. 中断-中断函数(中断-中断函数(中断-中断函数)),这样一直再入到单片机资源耗尽。

追问

你说的是不允许,要是真的发生了呢,比如说我在接受到第一个字节的数据后,在串口中断函数中延时10s,我想知道会发生什么,我后面的数据还能接收到吗

追答

中断-中断函数(中断-中断函数(中断-中断函数)),这样一直再入到单片机资源耗尽(等于死机)。

所以实际上你根本不知道他收到了没,

 

https://zhidao.baidu.com/question/190278319.html?qbl=relate_question_1&word=%B4%AE%BF%DA%BD%D3%CA%D5%D6%D0%B6%CF%BA%AF%CA%FD%B4%A6%C0%ED%CA%B1%BC%E4%B9%FD%B3%A4%2C%BB%E1%B6%AA%CA%A7%CF%C2%D2%BB%D7%D6%BD%DA%C2%F0

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值