Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięBascom - CRC dla tablicy 1024
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
-
- -
- Posty:8
- Rejestracja:30 gru 2010, o 22:26
- Lokalizacja:Kraków
Witam
Mam dwa pytania.
Ja utworzyć CRC dla tablicy zawierającej 1024 bajty.
Powinno się ją podzielić na mniejsze bliki i obliczać CRC32 czy istnieje jakiś inny sposób.
Oraz jaką maksymalną wielkość może osiągnąć tablica aby można było liczyć bezpiecznie CRC32.
Mam dwa pytania.
Ja utworzyć CRC dla tablicy zawierającej 1024 bajty.
Powinno się ją podzielić na mniejsze bliki i obliczać CRC32 czy istnieje jakiś inny sposób.
Oraz jaką maksymalną wielkość może osiągnąć tablica aby można było liczyć bezpiecznie CRC32.
-
- -
- Posty:8
- Rejestracja:30 gru 2010, o 22:26
- Lokalizacja:Kraków
Bascom - CRC dla tablicy 1024
Dobra inaczej
Oto krótki kod:
Suma kontrolna wg tego kodu wynosi „-927242255” , gdy ostatni bajt zostanie zmieniony , obliczona suma pozostaje bez zmian.
Jeśli tablica będzie zawierać 256 bajtów
suma z tego kodu wynosi „1430548066” jeśli ostatni bajt przyjmie wartość „101” suma kontrolna ulegnie zmianie i będzie wynosić „64750193” (przy crc16 wyniki są podobne). Bezpiecznie wg mnie oznacza „bycie pewnym obliczeń” a nie jestem. Chyba że źle do tego podchodzę.
Jeśli jest tu błąd to proszę naprowadź co jest nie tak lub w jaki sposób poprawnie obliczyć sumę z 1024 bajtów.
Oto krótki kod:
Kod: Zaznacz cały
$regfile = "m32def.dat"
$crystal = 16000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Cursor Off
Dim Ar(1024) As Byte
Dim X As Long
Dim A As Word
For A = 1 To 1023
Ar(a) = 240
Next A
Ar(1024) = 125
Do
X = Crc32(ar(1) , 1024)
Cls
Lcd X
Waitms 100
Loop
End
Jeśli tablica będzie zawierać 256 bajtów
Kod: Zaznacz cały
$regfile = "m32def.dat"
$crystal = 16000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Cursor Off
Dim Ar(256) As Byte
Dim X As Long
Dim A As Word
For A = 1 To 255
Ar(a) = 240
Next A
Ar(256) = 125
Do
X = Crc32(ar(1) , 256)
Cls
Lcd X
Waitms 100
Loop
End
Jeśli jest tu błąd to proszę naprowadź co jest nie tak lub w jaki sposób poprawnie obliczyć sumę z 1024 bajtów.
Hmm... to może warto wczytać się w dokumentację Bascoma, szczerze pierwotnie nie zwróciłem na to uwagi. Być może implementacja Bascomowska ma pewne ograniczenia. Wówczas należało by albo stworzyć własną implementację, albo... dzielić wiadomość na bloki zabezpieczane własnymi CRC.
Nie jest to jednak jakieś ograniczenie CRC jako takiego.
Btw. CRC powinno być raczej wartością unsigned, choć jeśli po obu stronach przypiszemy je do takiego samego typu to nie powinno to wpłynąć na porównanie.
Nie jest to jednak jakieś ograniczenie CRC jako takiego.
Btw. CRC powinno być raczej wartością unsigned, choć jeśli po obu stronach przypiszemy je do takiego samego typu to nie powinno to wpłynąć na porównanie.
-
- -
- Posty:8
- Rejestracja:30 gru 2010, o 22:26
- Lokalizacja:Kraków
Bascom - CRC dla tablicy 1024
W helpie tylko jeden przykład na tabeli 8 bajtowej, w opisanym przykładzie nie podają żadnych ograniczeń. Wiadomo że w bascomie można robić wstawki asm i może w ten sposób to wykonać. Natomiast z asm praktycznie nie miałem styczności i nie wiem jak się do tego zabrać. Podzielę tabelę na cztery bloki i powinno działać.
Dzięki za odpowiedź.
Dzięki za odpowiedź.
-
- -
- Posty:91
- Rejestracja:17 lut 2005, o 12:02
- Lokalizacja:Wrocław
- Kontaktowanie:
Re: Bascom - CRC dla tablicy 1024
Cześć.
Wiecie może, dlaczego w Bascom AVR funkcja crc32 dla stringu 123 zwraca 494976085
Podczas, gdy w rzeczywistości ta wartość wynosi tyle:
https://www.tools4noobs.com/online_php_functions/crc32/
Ktoś wie jak działa / co stoi tak na prawdę za funkcją crc32 w Bascom AVR ?
Pozdrawiam
Mariusz
Wiecie może, dlaczego w Bascom AVR funkcja crc32 dla stringu 123 zwraca 494976085
Podczas, gdy w rzeczywistości ta wartość wynosi tyle:
https://www.tools4noobs.com/online_php_functions/crc32/
Ktoś wie jak działa / co stoi tak na prawdę za funkcją crc32 w Bascom AVR ?
Pozdrawiam
Mariusz
Re: Bascom - CRC dla tablicy 1024
Nie wiem czemu ale -> TUTAJ <- wyszło tak samo.
Do tego nie wiem dlaczego tu zakładasz temat skoro na forum atnel już Ci to wyjaśnili -> KLIK <-
Do tego nie wiem dlaczego tu zakładasz temat skoro na forum atnel już Ci to wyjaśnili -> KLIK <-
-
- -
- Posty:91
- Rejestracja:17 lut 2005, o 12:02
- Lokalizacja:Wrocław
- Kontaktowanie:
Re: Bascom - CRC dla tablicy 1024
Nie zakładam, co najwyżej podpinam pod istniejący (gdyż widzę, że koledzy oblatani w temacie).
Temat nie jest wyjaśniony. Ktoś zasugerował / zauważył, że mógł zostać użyty inny wielomian / inna odmiana CRC32.
Problem w tym, że nie wiadomo co to za wielomian, co to za odmiana. Mi póki co nie udało się tego do niczego dopasować.
Temat nie jest wyjaśniony. Ktoś zasugerował / zauważył, że mógł zostać użyty inny wielomian / inna odmiana CRC32.
Problem w tym, że nie wiadomo co to za wielomian, co to za odmiana. Mi póki co nie udało się tego do niczego dopasować.
Re: Bascom - CRC dla tablicy 1024
Gdzie masz CRC32 w przykładzie z Bascoma liczone od zmiennej typu String? i gdzie Ty widzisz 123?
Przykład liczy crc32 nie ze string tylko z 3 wartości liczbowych z tablicy AR(), czyli nie z ciągu znaków "123" tylko z trzech liczb 1,2,3
Tu liczysz CRC32 z 3 liczb typu Byte czyli max wartośc to 255 i CRC32 wyliczone prawidłowo:
Teraz przykład liczenia CRC32 z jednej liczby 123
np tu: http://www.lammertbies.nl/comm/info/crc ... ation.html
To samo, ale liczone z tablicy AR():
Natomiast jeśli chcesz liczyć ze zmiennej typu string ,zapis bedzie taki:
Chyba proste? i jak się okazuje CRC32 w Bascomie jest liczone wzorowo, a to wszytko jest opisane w helpie Bascoma.
Teraz to samo, ale bez korzystania z tablicy
I całkiem na koniec, nieco więcej pisania,ale z wbudowanym rewersem
Przykład liczy crc32 nie ze string tylko z 3 wartości liczbowych z tablicy AR(), czyli nie z ciągu znaków "123" tylko z trzech liczb 1,2,3
Tu liczysz CRC32 z 3 liczb typu Byte czyli max wartośc to 255 i CRC32 wyliczone prawidłowo:
Kod: Zaznacz cały
Dim Ar(3) As Byte
Dim L As Long
Ar(1) = 1
Ar(2) = 2
Ar(3) = 3
L = Crc32(ar(1) , 3) '494976085
Kod: Zaznacz cały
Dim L As Long
Dim I As Byte
I = 123 ' w HEX bedzie 7B
L = Crc32(i , 1)
Print L '961008917
Print Hex(l) ' 3947D515 ( i rewers 15D54739 - Taki wynik otrzymasz w kalkulatorach online)
To samo, ale liczone z tablicy AR():
Kod: Zaznacz cały
Dim Ar(1) As Byte
Dim L As Long
Ar(1) = 123
L = Crc32(ar(1) , 1)
Print L
Print Hex(l)
Kod: Zaznacz cały
Dim Ar(1) As String * 3
Dim L As Long
Ar(1) = "123"
L = Crc32(ar(1) , 3)
Print L
Print Hex(l), Wynik D2634888 i jego rewers 884863D2
Teraz to samo, ale bez korzystania z tablicy
Kod: Zaznacz cały
Dim I As String * 3
Dim L As Long
I = "123"
L = Crc32(i , 3)
Print L
Print Hex(l)
Kod: Zaznacz cały
Dim I As String * 3
Dim V As String * 8
Dim V2 As String * 2
Dim Decc As Dword
Dim L As Long
I = "123"
L = Crc32(i , 3)
V = Hex(l)
Gosub Rewers
Print "CRC32:" ; V ; " - Rewers Crc32 : " ; V2
Decc = Hexval(v2)
Print "Dziesiętnie - " ; Decc
End
Rewers:
V2 = Mid(v , 7 , 2)
V2 = V2 + Mid(v , 5 , 2)
V2 = V2 + Mid(v , 3 , 2)
V2 = V2 + Mid(v , 1 , 2)
Return
Re: Bascom - CRC dla tablicy 1024
Dobra inaczej
Oto krótki kod:
Dim X As Long ' Tu powinno być Dim X As Dword to wszystko w temacie, reszta jest ok przykro, że trwało to 5lat;)Kod: Zaznacz cały
$regfile = "m32def.dat" $crystal = 16000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 Cursor Off Dim Ar(256) As Byte
.Kod: Zaznacz cały
Dim A As Word For A = 1 To 255 Ar(a) = 240 Next A Ar(256) = 125 Do X = Crc32(ar(1) , 256) Cls Lcd X Waitms 100 Loop End
Zapisał bym to tak:
Kod: Zaznacz cały
Dim Ar(1024) As Byte
Dim X As Dword
Dim A As Integer
For A = 1 To 1023
Ar(a) = 240
Next A
Ar(1024) = 255
X = Crc32(ar(1) , 1024)
End
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 56 gości