首页 文章

UDP中断是否有效?

提问于
浏览
0

一个简单的问题:做中断,比如Arduino,干扰通过UDP发送和接收数据报的任何方式?或者数据在某种缓冲区中“等待”?

如果它对答案很有用,我通过TP-LINK WR702N Nano在联想X201上使用带有以太网屏蔽和Qt QUdpSocket的Arduino Mega上的UDP库 .

谢谢,Mystère先生

1 回答

  • 1

    Arduino以太网屏蔽基于Wiznet W5100芯片,该芯片包含一个16k缓冲区,用于Rx和Tx缓冲区data sheet . 该芯片实现了协议栈,这意味着数据包的接收和传输独立于Arduino主板芯片 . 对于任何实际数量的数据传输,主芯片上的中断或任务不会干扰网络堆栈 . 如果您以16k的比例传输数据而无法跟上,那么您可能会开始丢失数据 .

    Arduino wifi屏蔽实际上包含一个比Arduino本身“更大”的微控制器,这也会缓冲以太网流量 . 以太网芯片的成本与Arduino相同的部分原因是它们承载了大量的工作量 .

    想一想“中断是什么中断的?”这个问题 . 是一个很好的问题 . 您可以确保loop()中的所有内容在任何时候都会被中断,或者更好地在每个可能的点上进行思考 . 中断不是在C代码级别发生,而是在机器代码级别发生 . 在任何C代码行的中间,您应该会发生中断 . 因此,使用loop()代码共享变量的中断处理程序需要仔细考虑 . 例如,如果你的loop()包含

    y = 3 + 4*x * 5 * x*x;
    

    并且中断处理程序修改全局变量x,y的值最终可能会出现一些不可能的值 . 如果您在循环()中有要保护中断的操作,则可以禁用中断

    see noInterupts()

相关问题