Jak vymazat sériovou vyrovnávací paměť Arduino

Jak Vymazat Seriovou Vyrovnavaci Pamet Arduino



Arduino je elektronická platforma, která přebírá pokyny od uživatelů ve formě kódu známého jako sketch a podle toho generuje výstup. Ke shromažďování instrukcí a jejich zpracování jeden po druhém používá Arduino sériovou vyrovnávací paměť. Sériová vyrovnávací paměť Arduina uchovává příchozí data, dokud není zařízení připraveno je zpracovat. Někdy musíme vymazat sériovou vyrovnávací paměť Arduina, abychom zabránili interferenci s příchozími daty. Podívejme se na to podrobněji.

Arduino Serial Buffer

Všichni tedy víme, že Arduino komunikuje pomocí sériového komunikačního protokolu známého jako USART. Ano, Arduino má některé další protokoly jako SPI, I2C, ale USART je nejběžnější a nejčastěji používaný protokol. Pokud máte zájem si přečíst všechny tři protokoly Arduina, klikněte tady .







Sériové vyrovnávací paměti Arduino shromažďují příchozí sériové znaky a uchovávají je, dokud je mikrokontrolér nedokáže zpracovat. Sériová komunikace je způsob přenosu dat z jednoho zařízení do druhého. Arduino pomocí hardwaru USART na svých deskách sestavuje každých 8 bitů do bajtu. Poté uložte tyto bajty do sériové vyrovnávací paměti, maximálně 64 bajtů lze uložit do sériové vyrovnávací paměti Arduina.



Vymažte sériovou vyrovnávací paměť Arduino

Sériové vyrovnávací paměti Arduino mají omezenou paměť pro ukládání dat v případě, že dojde k přetečení paměti nebo velkému množství dat na sériovém kolíku, musíme nejprve vymazat sériovou vyrovnávací paměť, abychom uložili příchozí data. Pojďme zjistit možné způsoby, jak vyčistit sériovou vyrovnávací paměť Arduino.



Způsoby, jak vymazat sériovou vyrovnávací paměť Arduino

Chcete-li uvolnit sériovou vyrovnávací paměť, aby ji bylo možné aktualizovat novými daty, mohou být užitečné následující dva způsoby:





    • Vymažte sériovou vyrovnávací paměť pomocí funkce Serial.flush().
    • Vymažte sériovou vyrovnávací paměť pomocí funkce Serial.begin().

1: Vymažte sériovou vyrovnávací paměť pomocí funkce Serial.flush().

Takže první metodou, která může vymazat sériovou vyrovnávací paměť Arduina, je použití funkce Serial.flush(). Tato funkce patří do funkce sériové knihovny Arduino.

Serial.flush()

Funkce Arduino Serial.flush() čeká na úplný přenos dat. Spíše než vyřazení příchozích dat umožňuje čekat, takže jakmile jsou data uvnitř vyrovnávací paměti kompletně přenesena, může sériová vyrovnávací paměť přijímat nová data.



Poznámka : Po použití programu Serial.flush() může spuštění a tisk výstupu na sériovém monitoru trvat déle. Nyní kód Arduino čeká, až budou všechna data přenesena, aby mohl uložit nová data do své paměti.

Syntax

Serial.flush ( )

Parametry

Chce to jen jeden parametr.

Seriál: Objekt sériového portu

Návraty

Tato funkce nevrací nic.

Příklad kódu

Zde je kód, který je napsán bez použití funkce Serial.flush():

neplatné nastavení ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* Spusťte kód uložením aktuálních hodin Arduina čas */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
unsigned long millis_FlushStop = milis ( ) ; /* proud čas v tomto bodě */
Sériový.tisk ( F ( 'Bez funkce splachování to trvá' ) ) ;
Sériový.tisk ( millis_FlushStop - millis_FlushStart ) ; /* Tisky čas přijatá sériovou vyrovnávací pamětí pro tisk dat */
Serial.println ( F ( 'milisekundy.' ) ) ;
}
prázdná smyčka ( ) {
}


Ve výše uvedeném kódu jsme inicializovali tři různé řetězce a spustili kód tím, že jsme vzali aktuální čas z funkce millis() a uložili jej do nové proměnné. Jakmile jsou data znovu vytištěna pomocí funkce millis(), předáme aktuální čas nové proměnné.

Jakmile jsou oba časy přijaty uvnitř dvou proměnných, rozdíl nám dá čas, který Arduino potřebuje k vytištění tří definovaných řetězců v milisekundách.


Na výstupním terminálu je vidět, že vytištění definovaného řetězce trvá 9 ms.


Nyní v kódu uvedeném níže použijeme funkci Serial.flush(), která umožní průchod všem řetězcům a čeká, dokud se nevyčistí sériová vyrovnávací paměť, aby mohla přijímat další data. Ve srovnání s tiskem dat bez použití Serial.flush() to proto zabere více času.

neplatné nastavení ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = millis ( ) ; /* Spusťte kód uložením aktuálních hodin Arduina čas */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Serial.flush ( ) ; /* čeká pro data, která mají být přenesena po tomto vyprázdnění paměti */
unsigned long millis_FlushStop = milis ( ) ; /* proud čas v tomto bodě */
Sériový.tisk ( F ( 'S funkcí Flush to trvá' ) ) ;
Sériový.tisk ( millis_FlushStop - millis_FlushStart ) ; /* Tisky čas přijatá sériovou vyrovnávací pamětí pro tisk dat */
Serial.println ( F ( 'milisekundy.' ) ) ;
}
prázdná smyčka ( ) {
}


Tento kód je podobný tomu, který jsme vysvětlili dříve. Rozdíl je zde ve funkci Serial.flush(), která umožňuje programu čekat nějakou dobu navíc, než se sériová vyrovnávací paměť uvolní pro příjem dalších dat.


Na výstupu jasně vidíme, že tentokrát trvá tisk tří řetězců 76 ms ve srovnání s předchozím, který trvá pouze 9 ms.

2: Vymažte sériovou vyrovnávací paměť pomocí funkce Serial.begin().

Doposud jsme vysvětlovali funkci Serial.flush() pro vymazání sériového bufferu, ale tato funkce musí počkat, až se data úplně přenesou, nyní přicházejí na mysl otázky, co když chceme vymazat příchozí data uvnitř sériového bufferu. Odpověď na otázku je jednoduchá: můžeme to udělat pomocí a zatímco smyčka s funkcí sériové knihovny.

Syntax

zatímco ( Sériové.k dispozici ( ) )
Serial.read ( ) ;
Serial.end ( ) ;
Serial.begin ( 9600 ) ;

Kód

String val;
neplatné nastavení ( ) {
}
prázdná smyčka ( ) {
-li ( Serial.k dispozici ( ) ) { /* šek pro sériová data */
val = '' ;
zatímco ( Serial.k dispozici ( ) ) { /* číst sériová data -li dostupný */
char Sériová_data = Serial.read ( ) ;
val =val+Sériová_data; /* uložit data do nového řetězce */
}
Serial.println ( val ) ; /* vytisknout číst data */
Serial.end ( ) ; /* ukončit sériovou komunikaci */
Serial.begin ( 9600 ) ; /* Průhledná sériový buffer */
}
}


Arduino používá funkce Serial.begin() k inicializaci sériové komunikace definováním přenosové rychlosti. Jakmile je tato funkce inicializována, data dříve uložená v paměti Arduina se vyčistí. Zde zkontrolujeme sériová data pomocí funkce Serial.available(), jakmile jsou data načtena, uloží se do nového řetězce a nakonec pomocí Serial.begin(9600) vymažeme sériovou vyrovnávací paměť Arduina.

Poznámka: Potřebujeme vyprázdnit sériovou vyrovnávací paměť, protože zajišťuje, že data byla odeslána do zařízení a nečeká nebo čeká na odeslání.

Závěr

K vymazání sériové vyrovnávací paměti Arduina, aby mohla ukládat nová data do vyrovnávací paměti, lze použít Serial.flush() a Serial begin. Lze jej použít k vymazání sériové vyrovnávací paměti Arduina, ale musíme počkat, až budou všechna data přenesena, abychom tomu zabránili, můžeme použít smyčku while s funkcí Serial.begin(), která také dokáže vymazat příchozí data ze sériové vyrovnávací paměti.