Fixing Arduinos seriella latensproblem

[Paul] skrev in för att berätta om några intressanta arduino latensproblem som han hjälpte till att spika ner och fixa på Arduino.

Det verkar som att [Michu] hade några problem med att styra sitt RainbowDuino-projekt som vi presenterade tidigare i år, och han kunde inte helt räkna med varför han upplevde sådana stora förseningar när han skickade och ta emot data.

Att söka online för svar visade sig väldigt lite, och eftersom [Michu] använde bearbetning, utvecklade paret en uppsättning tester för att se vilken typ av latens introducerades av Java. Pitting en Arduino Uno och en Arduino från 2009 Mot en Teensy 2.0, testerna mäter latensen hos inhemska dataöverföringar kontra överföringar underlättade av Java via RXTX-biblioteket som det använder för seriekommunikation.

Resultaten var ganska fantastiska. Medan båda arduinerna slog sig bakom teensy med ett långt skott, var deras latensvärden under Java alltid 20ms åtminstone – något lagde inte upp. [Michu] poked runt i RXTX-koden och hittade en Mystery 20MS-fördröjning programmerad i seriebiblioteket. Det hade ingen mening för honom, så han ändrade förseningen till 2 ms och såg en drastisk ökning av prestanda vid överföring av mindre än 128 byte av data.

Parets fix verkar inte påverka latens när större mängder data (> 1kb) överförs, men det gör en värld av skillnad vid manipulering av mindre bitar av data.

För upplysningens skull borde det noteras att [Paulus] -företaget producerar Teensy MCU.