Ako vymazať sériovú vyrovnávaciu pamäť Arduino

Ako Vymazat Seriovu Vyrovnavaciu Pamat Arduino



Arduino je elektronická platforma, ktorá preberá pokyny od používateľov vo forme kódu známeho ako skica a podľa toho generuje výstup. Na zhromažďovanie pokynov a ich spracovanie jeden po druhom používa Arduino sériovú vyrovnávaciu pamäť. Sériová vyrovnávacia pamäť Arduina uchováva prichádzajúce dáta, kým nie je zariadenie pripravené ich spracovať. Niekedy musíme vyčistiť sériovú vyrovnávaciu pamäť Arduina, aby sme predišli interferencii s prichádzajúcimi dátami. Pozrime sa na to podrobnejšie.

Arduino Serial Buffer

Všetci teda vieme, že Arduino komunikuje pomocou sériového komunikačného protokolu známeho ako USART. Áno, Arduino má niektoré ďalšie protokoly ako SPI, I2C, ale USART je najbežnejší a najčastejšie používaný protokol. Ak máte záujem prečítať si všetky tri protokoly Arduino, kliknite tu .







Sériové vyrovnávacie pamäte Arduino zhromažďujú prichádzajúce sériové znaky a uchovávajú ich, kým ich mikrokontrolér nedokáže spracovať. Sériová komunikácia je spôsob prenosu údajov z jedného zariadenia do druhého. Arduino pomocou hardvéru USART na svojich doskách zostavuje každých 8 bitov do bajtu. Potom uložte tieto bajty do sériovej vyrovnávacej pamäte, maximálne 64 bajtov je možné uložiť do sériovej vyrovnávacej pamäte Arduino.



Vymazať sériovú vyrovnávaciu pamäť Arduino

Sériové vyrovnávacie pamäte Arduino majú obmedzenú pamäť na ukladanie údajov v prípade, že sa pamäť preplní alebo je na sériovom kolíku veľké množstvo údajov, musíme najprv vymazať vyrovnávaciu pamäť sériového rozhrania, aby sa uložili prichádzajúce údaje. Poďme zistiť možné spôsoby vymazania sériovej vyrovnávacej pamäte Arduino.



Spôsoby vymazania sériovej vyrovnávacej pamäte Arduino

Ak chcete uvoľniť sériovú vyrovnávaciu pamäť, aby ju bolo možné aktualizovať novými údajmi, môžu byť užitočné nasledujúce dva spôsoby:





    • Vymažte sériovú vyrovnávaciu pamäť pomocou funkcie Serial.flush().
    • Vymažte sériovú vyrovnávaciu pamäť pomocou funkcie Serial.begin().

1: Vymažte sériovú vyrovnávaciu pamäť pomocou funkcie Serial.flush().

Takže prvá metóda, ktorá môže vyčistiť sériovú vyrovnávaciu pamäť Arduina, je pomocou funkcie Serial.flush(). Táto funkcia patrí do funkcie sériovej knižnice Arduino.

Serial.flush()

Funkcia Arduino Serial.flush() čaká na úplný prenos údajov. Namiesto vyhadzovania prichádzajúcich údajov im umožňuje čakať, takže keď sa údaje vo vyrovnávacej pamäti úplne prenesú, sériová vyrovnávacia pamäť môže prijať nové údaje.



Poznámka : Po použití programu Serial.flush() môže spustenie a tlač výstupu na sériovom monitore trvať dlhšie. Odteraz kód Arduino čaká na prenos všetkých údajov, aby mohol uložiť nové údaje do svojej pamäte.

Syntax

Sériové.splachovanie ( )

Parametre

Chce to len jeden parameter.

Serial: Objekt sériového portu

Návraty

Táto funkcia nevracia nič.

Príklad kódu

Tu je kód, ktorý je napísaný bez použitia funkcie Serial.flush():

neplatné nastavenie ( ) {
Serial.začať ( 9600 ) ;
unsigned long millis_FlushStart = milis ( ) ; /* Spustite kód uložením aktuálnych hodín 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 ( ) ; /* prúd čas v tomto bode */
Sériová.tlač ( F ( 'Bez funkcie splachovania to trvá' ) ) ;
Sériová.tlač ( millis_FlushStop - millis_FlushStart ) ; /* Výtlačky čas odoberané sériovou vyrovnávacou pamäťou na tlač údajov */
Serial.println ( F ( 'milisekundy.' ) ) ;
}
prázdna slučka ( ) {
}


Vo vyššie uvedenom kóde sme inicializovali tri rôzne reťazce a spustili kód prevzatím aktuálneho času z funkcie millis() a jeho uložením do novej premennej. Po opätovnom vytlačení údajov pomocou funkcie millis() prenesieme aktuálny čas do novej premennej.

Akonáhle sú obidva časy prijaté v rámci dvoch premenných, rozdiel nám poskytne čas, ktorý Arduino potrebuje na vytlačenie troch definovaných reťazcov v milisekundách.


Na výstupnom termináli je vidieť, že vytlačenie definovaného reťazca trvá 9 ms.


Teraz v kóde uvedenom nižšie použijeme funkciu Serial.flush(), ktorá umožní všetkým reťazcom prejsť a počkať, kým sa sériová vyrovnávacia pamäť neuvoľní, aby mohla prijať ďalšie údaje. V porovnaní s tlačou údajov bez použitia Serial.flush() to preto zaberie viac času.

neplatné nastavenie ( ) {
Serial.začať ( 9600 ) ;
unsigned long millis_FlushStart = milis ( ) ; /* Spustite kód uložením aktuálnych hodín Arduina čas */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Sériové.splachovanie ( ) ; /* Čaká pre údaje, ktoré sa majú preniesť po tomto vyprázdnení pamäte */
unsigned long millis_FlushStop = milis ( ) ; /* prúd čas v tomto bode */
Sériová.tlač ( F ( 'S funkciou Flush to trvá' ) ) ;
Sériová.tlač ( millis_FlushStop - millis_FlushStart ) ; /* Výtlačky čas odoberané sériovou vyrovnávacou pamäťou na tlač údajov */
Serial.println ( F ( 'milisekundy.' ) ) ;
}
prázdna slučka ( ) {
}


Tento kód je podobný tomu, ktorý sme vysvetlili vyššie. Rozdielom je funkcia Serial.flush(), ktorá umožňuje programu počkať nejaký čas navyše, kým sa sériová vyrovnávacia pamäť uvoľní pre príjem ďalších údajov.


Na výstupe jasne vidíme, že tentoraz trvá vytlačenie troch reťazcov 76 ms v porovnaní s predchádzajúcim, ktorý trvá iba 9 ms.

2: Vymažte sériovú vyrovnávaciu pamäť pomocou funkcie Serial.begin().

Doteraz sme vysvetlili funkciu Serial.flush() na vymazanie vyrovnávacej pamäte sériového rozhrania, ale táto funkcia musí počkať, kým sa údaje úplne prenesú, teraz prichádzajú na myseľ otázky, čo ak chceme vymazať prichádzajúce údaje vo vyrovnávacej pamäti sériového čísla. Odpoveď na otázku je jednoduchá: môžeme to urobiť pomocou a zatiaľ čo slučka s funkciou sériovej knižnice.

Syntax

zatiaľ čo ( Sériové.dostupné ( ) )
Serial.read ( ) ;
Serial.end ( ) ;
Serial.začať ( 9600 ) ;

kód

String val;
neplatné nastavenie ( ) {
}
prázdna slučka ( ) {
ak ( Sériové.dostupné ( ) ) { /* skontrolovať pre sériové dáta */
val = '' ;
zatiaľ čo ( Sériové.dostupné ( ) ) { /* čítať sériové dáta ak k dispozícii */
char Serial_Data = Serial.read ( ) ;
val =val+Sériové_údaje; /* uložiť údaje do nového reťazca */
}
Serial.println ( val ) ; /* vytlačiť čítať údajov */
Serial.end ( ) ; /* ukončiť sériovú komunikáciu */
Serial.začať ( 9600 ) ; /* jasný sériová vyrovnávacia pamäť */
}
}


Arduino používa funkcie Serial.begin() na inicializáciu sériovej komunikácie definovaním prenosovej rýchlosti, akonáhle je táto funkcia inicializovaná, údaje predtým uložené v pamäti Arduina sa vyčistia. Tu skontrolujeme sériové dáta pomocou funkcie Serial.available(), keď sa dáta načítajú, uložia sa do nového reťazca a nakoniec pomocou Serial.begin(9600) vymažeme sériovú vyrovnávaciu pamäť Arduina.

Poznámka: Musíme prepláchnuť sériovú vyrovnávaciu pamäť, pretože zaisťuje, že údaje boli odoslané do zariadenia a jednoducho nečakajú alebo nečakajú na odoslanie.

Záver

Na vymazanie sériovej vyrovnávacej pamäte Arduina, aby mohla ukladať nové dáta do vyrovnávacej pamäte, možno použiť Serial.flush() a Serial begin. Dá sa použiť na vymazanie sériovej vyrovnávacej pamäte Arduina, ale musíme počkať, keď sa prenesú všetky údaje, aby sme tomu zabránili, môžeme použiť while loop s funkciou Serial.begin(), ktorá tiež dokáže vymazať prichádzajúce dáta zo sériovej vyrovnávacej pamäte.