Skocz do zawartości

Buffer Serial


Czaro

Pomocna odpowiedź

Witam, chciałbym zapisać ramki przychodzące do arduino po UART do jego pamięci. Najlepiej do tabeli char[64]. Wiem że należy posłużyć się wskaźnikami lecz w dalej nie wiem jak podejść do tego problemu.

Z góry dzięki za pomoc.

Link do komentarza
Share on other sites

  
#define BUFFER_SIZE 64

if ((*Serial).available())
{
  unsigned char buffer = 0;
  unsigned char overflow = 0;

  while ((*Serial).available())
  {
	  if (overflow) 
		  (*Serial).read();
	  else
	  {
		  if (buffer == BUFFER_SIZE)
                                 {
			          overflow = 1;
                                 }
		  frame[buffer] = (*Serial).read();
		  buffer++;
	  }
  }
}

Nada się?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Możesz usunąć pierwszego if-a, i tak później sprawdzasz czy dane są dostępne przy wykonywaniu while.

Poza tym jak masz wskaźnik do obiektu to możesz wywoływać metody obiektu za pomocą '->':

Serial->read();

Dodatkowo rozmiar bufora pod kątem przepełnienia powinieneś sprawdzać po inkrementacji indeksu, w Twoim kodzie jak indeks zwiększysz z 63 na 64 to jeden raz zapiszesz dane poza zarezerwowanym miejscem w pamięci (bo flagę ustawisz, ale i tak zapiszesz dane).

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.