1 つの簡単な質問: たとえば Arduino の割り込みは、UDP を介したデータグラムの送受信に何らかの形で干渉しますか? それとも、データはある種のバッファで「待機」していますか?
回答に役立つ場合は、TP-LINK WR702N Nanoを介して、Lenovo X201でイーサネットシールドとQtのQUdpSocketを備えたArduino MegaでUDPライブラリを使用しています。
ありがとうミステールさん
Arduino イーサネット シールドは、Rx および Tx バッファーデータ シートに使用される 16k バッファーを含む Wiznet W5100 チップに基づいています。このチップはプロトコル スタックを実装しています。つまり、パケットは Arduino メイン ボード チップとは無関係に送受信されます。実際の量のデータ転送では、メイン チップ上の割り込みまたはタスクがネットワーク スタックに干渉することはありません。16k の規模でデータを転送していて、それについていくことができない場合、データが失われ始める可能性があります。
Arduino wifiシールドには、実際にはArduino自体よりも「大きい」マイクロコントローラが含まれており、これもイーサネットトラフィックをバッファします。イーサネット チップのコストが Arduino と同じくらい高い理由の 1 つは、イーサネット チップが多くの作業負荷を担っていることです。
「割り込みは何を割り込みますか?」という質問について考えてみます。良い質問です。loop() 内のすべてが任意の時点で中断されることを保証できます。割り込みは、C++ コード レベルではなく、マシン コード レベルで発生します。C++ コードの任意の行の途中で、割り込みが発生することを予期する必要があります。そのため、変数を loop() コードと共有する割り込みハンドラについては、慎重に検討する必要があります。たとえば、 loop() が含まれている場合
y = 3 + 4*x * 5 * x*x;
割り込みハンドラーがグローバル変数 x を変更すると、y の値がいくつかの不可能な値になる可能性があります。loop() に割り込みから保護したい操作がある場合は、割り込みを無効にすることができます