Trochê próbowa³em poszukaæ, ale wszêdzie znajdujê opisy CRC dla wielomianów, które przy wszystkich potêgach x maj± albo 0 albo 1, lub jakie¶ czysto matematyczne wywody, bez wystarczaj±co prostego prze³o¿enia na algorytm.
Wie kto¶ mo¿e gdzie znale¼æ opis jak to siê liczy (jaki¶ przyk³ad algorytmu) ? P.G.
Didn't find your answer? Ask the community — no account required.
M
Mario
W dniu 2011-02-14 14:25, Piotr Gałka pisze:
Zobacz w źródłach freemodbus.
A
Adam Dybkowski
W dniu 2011-02-14 22:17 Mario napisał(a):
Tyle że w dokumentacji Atmela jest błąd i w rzeczywistości CRC jest liczone wg bardziej powszechnego wzoru:
x^19 + x^4 + x^3 + x^1 + 1
formatting link
/*
The Xmega manual Rev G lists the CRC Polynomial
as: x^24 + 4x3 + 3x +1.
*
Based on some untested code supplied by avr(at)atmel.com,
I believe the correct Polynomial is:
x^19 + x^4 + x^3 + x^1 + 1
*
At any rate after cleaning up their code issues, the following C
code generates the same values as the XMega 128A1 hardware.
To by chyba zamykało problem. W okolicy tego wpisu na forum AVRFreaks jest podany link do źródeł funkcji obliczającej poprawnie CRC (tzn. z wynikiem identycznym jak ATxmega).
J
J.F.
cos mi sie widzi ze i tak trzeba bedzie prosic Atmela o wyjasnienie, ba tam chyba wiecej szczegolow jest istotnych.
podejrewam ze w kluczowym momencie trzeba cos co przesunac o dwa bity (4) albo o jeden i xorowac z oryginalem (razem 3).
J.
P
Piotr Gałka
U¿ytkownik "Adam Dybkowski" snipped-for-privacy@45wp.pl napisa³ w wiadomo¶ci news:ijc7pv$hc5$ snipped-for-privacy@news.onet.pl...
...
Dziêki. P.G.
P
Piotr Gałka
U¿ytkownik "Adam Dybkowski" snipped-for-privacy@45wp.pl napisa³ w wiadomo¶ci news:ijc7pv$hc5$ snipped-for-privacy@news.onet.pl...
Wynik zgodzi³ mi siê dla wszystkich sum liczonych przez XMEGA po skasowaniu (3 wyniki) i po wpisaniu programu z bootloaderem (kolejne 3). Na maszynie maj±cej odwrotn± kolejno¶æ bajtów w word mój zapis nie zadzia³a.
Nie wnika³em jak to dzia³a bez obracania 16 razy (bo 2 bajty za jednym ruchem) po bicie, ale s±dzê, ¿e przyczyn± jest du¿a odleg³o¶æ miêdzy bitem x^19 a nastêpnymi. I tak brakuje mi gdzie¶ przesuniêcia o 8 w jedn± albo o
16 w drug±. Zastanawia mnie te¿ to, ¿e do XOR u¿yta jest liczba, która by odpowiada³a zapisowi x^23 + x^4 + x^3 + x^1 + 1. Czy brak obracania mo¿e mieæ zwi±zek z zast±pieniem x^19 przez x^23. Gdyby ró¿nica by³a 8, ale jest 4. Mam podejrzenie, ¿e to crc tak na prawdê nie jest opisane ¿adnym z tych wielomianów. P.G.
Dla porównania orygina³:
-------------------------- #define CRC32_POLY (0x0080001BUL) /* Polynomial for use with Xmega 'A' devices */
/* This CRC Routine is the corresponding routine implemented in Xmega hardware: */ uint32_t CRC_Reference( uint32_t startWord_u32, uint32_t endWord_u32 ) { uint32_t addr_u32, data_reg_u32, help_a_u32, help_b_u32; uint32_t crc_reg_u32 = 0;
No wlasnie - cos mi to zbyt prosto wyglada. CRC zwykle wymagalo przetwarzania po bicie, albo dosc skomplikowanych programow z tablicami. Cos tu mocno uproscili.
J.
P
Piotr Gałka
U¿ytkownik "J.F." <jfox snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news: snipped-for-privacy@4ax.com...
Dla crc16 Atmel przed laty w jakiej¶ nocie aplikacyjnej opisa³ pewien po¶redni algorytm oparty na znanej matematycznej metodzie: "zauwa¿my ¿e". Wysz³o parê obliczeñ bez przesuwania po bicie i bez tablic. Korzystaj±c z bitu parzysto¶ci akumulatora dawa³o siê bardzo szybko policzyæ. W moich programach na PC korzystam z tej metody, choæ znalezienie w C bitu parzysto¶ci jest chyba najbardziej pracoch³onnym jej kawa³kiem. Nie wrzucam z definicji kodu, ale jak kto¶ zechce.... Jednak to co jest tu wydaje siê za proste, aby mog³o byæ jakim¶ CRC. A mo¿e ten wielomian co jest w instrukcji jest prawdziwy i po jakich¶ "zauwa¿my ¿e" sprowadza siê do przedstawionego obliczenia. A kto¶ nie ¶wiadomy ca³o¶ci widz±c co jest brane do XOR uzna³, ¿e to jest ten wielomian. Widaæ, ¿e siê bardzo ¶pieszy³, bo nie doliczy³ siê nawet pozycji pierwszej jedynki. P.G.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.