tmf napisał: Nic nie analizuję. Odbieram stały początek ramki składający się z adresu i pola określającego długość reszty danych. Dzięki temu wiem ile ich mam jeszcze odebrać. Jeśli jestem paranoikiem to dodatkowo opatruję to CRC, dzięki czemu wiem, że header jest ok. Cały pakiet kończy się CRC, jeśli liczę je na bieżąco to prawidłowa ramka musi dać w wyniku CRC=0. Dzięki temu nie ma opóźnień na przetwarzanie danych ramki. Nigdzie nie widzę tu obciążenia dla procesora.
Z tym obciążeniem to nie masz racji, jak ktoś liczy takty by uC się "wyrobił" to ma znaczenie.
W przypadku wykrywania początku ramki
1. Sprawdzasz czy nagłówek jest odebrany i prawidłowy (czyli pierwszy raz analizujesz dane).
2. Jak odebrany to:
- za każdym bajtem liczysz CRC (opcjonalnie) lub
- ładujesz dane do bufora zwiększając licznik ;
- jak licznik==długość ramki analizujesz dane (drugi raz);
- jak licznik<= długość ramki i czas zostaje przekroczony wszystko resetujesz;
W przypadku wykrywania końca ramki
1. Ładujesz dane do bufora dopóki napotkasz koniec ramki (if na dwóch bajtach) lub skończy się bufor (jak się skończy to wiadomo..wskaźniki na początek bufora i dalej odbieranie);
2. Jak masz koniec analizujesz dane (i nie ważne ile tego jest), po prostu cofasz wskaźnik szukając początku ramki...i masz całą ramkę.
Obie metody skuteczne i prawidłowe lecz ta pierwsza niestety potrzebuje "ciut" więcej czasu uC na obsługę przerwania.