0

一个快速的问题:Arduino 上的中断是否会以任何方式干扰通过 UDP 发送和接收数据报?还是数据在某种缓冲区中“等待”?

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

谢谢,米斯特先生

4

1 回答 1

1

Arduino 以太网扩展板基于 Wiznet W5100 芯片,该芯片包含一个 16k 缓冲器,用于 Rx 和 Tx 缓冲器数据表。该芯片实现了协议栈,这意味着数据包的接收和传输独立于 Arduino 主板芯片。对于任何实际数量的数据传输,主芯片上的中断或任务都不会干扰网络堆栈。如果您正在传输 16k 规模的数据并且无法跟上,那么您可能会开始丢失数据。

Arduino wifi shield 实际上包含一个比 Arduino 本身“更大”的微控制器,它也可以缓冲以太网流量。以太网芯片成本与 Arduino 一样高的部分原因是它们承担了大部分工作负载。

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

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

并且中断处理程序修改了全局变量 x,y 的值可能会以一些不可能的值结束。如果您的 loop() 中有您希望保护免受中断的操作,您可以禁用中断

见 noInterupts()

于 2013-06-13T04:52:30.973 回答