Jagermeister napisał(a):
Nie rozumiem dlaczego nie może być uint8_t. Wydaje mi się, że zakres uint8_t wynosi od 0 do 255, czyli warunek j>= 0 nie powinien kolidować z tym zakresem.
Zmienna typu
uint8_t jest zawsze większa lub równa zero, czyli warunek jest zawsze spełniony i program nie wyjdzie z pętli
for.
Jagermeister napisał(a):
Nie byłem świadom, że znaleziona funkcja nie nadaje się do danych binarnych. Z czego wynika to ograniczenie?
Nie wiem, czy to nazwać ograniczeniem, ale taka jest po prostu konstrukcja (przeznaczenie) funkcji, ponieważ argumentem funkcji jest wskaźnik na typ
char i funkcja kończy obliczanie CRC po napotkaniu bajtu równego
0:
while (message[i] != 0)Dla ciągu znaków
0 jest znakiem unikalnym i oznacza koniec ciągu (jeśli mówimy o języku C). W danych binarnych bajt o wartości
0 jest sytuacją naturalną.
Można oczywiście przerobić funkcję, aby obsługiwała dane binarne, jednak będzie to wymagało dodania drugiego argumentu informującego o rozmiarze danych w bajtach.
EDIT: Sorry, ale mała przerwa na obiad i nie zauważyłem Twojej odpowiedzi

Jagermeister napisał(a):
Oczywiście przerobiłem sobie dodajac dodatkowy parametr "dlugosc danych do przetworzenia" i zmieniajac while na for.
...no i jeszcze ta zmienna
j powinna być typu
int8_t zamiast
uint8_t i powinno być OK

Musisz sprawdzić sam, bo ja nie mam możliwości w tej chwili tego przetestować

_________________
AVR-GCC - dane w pamięci FLASH