Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: armas - 27 Temmuz 2015, 00:52:00

Başlık: Checksum algoritması hakkında
Gönderen: armas - 27 Temmuz 2015, 00:52:00
Merhabalar,

Öncelikle haberleşmede kullanılan checksum hesaplamanın tek bir algoritması veya daha fazla algoritmanın olup olmadığı konusunda kafam karıştı. Çünkü checksum hakkında okuduğum yazılarda herkes farklı şeyler anlatmış. Elimde checksumı hesaplayan bir algoritma var fakat bunu da tam anlamıyla anlayamadım. Bu konuda yardımcı olursanız sevinirim. Kod şu şekilde ;

uint8_t CalculatePEC(uint8_t *array, uint8_t len){

uint8_t rem= 0x41;

uint8_t i=0, j=0;

for(i=0; i<len; i++) {

rem= rem^ array[i];

for(j=0; j<8; j++) {

if(rem & 0x80) { // if leftmost (most significant) bit is set

rem= (rem<< 1) ^ 0x07;

}

else {

rem= rem<< 1;

}

}

}

return rem;

}


Kod aşağıda verilen string örneğinde cheksumı hesaplıyor.

[0000070,043,019,000,1307,+0028,+0000,-00000,-00001,0001]245*


245 cheksum değeri. Cevaplarınız için şimdiden teşekkürler.
Başlık: Ynt: Checksum algoritması hakkında
Gönderen: Gökhan BEKEN - 27 Temmuz 2015, 10:13:11
Birsürü CRC yöntemi var.
Hex Workshop Hex Editor adlı program ile seçtiğiniz veriler için checksum hesaplayabiliyorsunuz.
(http://s21.postimg.cc/h5dzxvhkz/crc.jpg) (http://postimg.cc/image/h5dzxvhkz/)

Veri sayısı kadar dönen bir döngü kurup, verinin her byte'ını bu fonksiyona göndereceksiniz, checksum değeri sürekli güncellenmiş olacak.
Döngüden çıktıktan sonra, verinin sonunda ekli bulunan checksum ile sizin bulduğunuz checksum değeri aynı mı diye kontrol edeceksiniz.
Aynı ise iyi de, farklı ise sıkıntı büyük :)

Kullandığınız mcu'nun donanımsal CRC özelliğini kullanmanız daha verimli olur bence.
Başlık: Ynt: Checksum algoritması hakkında
Gönderen: Tagli - 27 Temmuz 2015, 11:17:33
Sanırım checksum türüne göre işlemde kullanılan polinom değişiyor. Bazı işlemcilerin donanımsal CRC modüllerinde bu polinom sabit, o yüzden tek türde CRC işlemi yapabiliyorlar.
Başlık: Ynt: Checksum algoritması hakkında
Gönderen: vsalma - 27 Temmuz 2015, 14:48:12
Cok sayida checksum algoritmasi var. Hesaplamak icin bir polinom kullaniliyor. Secilen polinomun hesaplanmasi bazen kodddaki gibi bitwise islemlerle yapilabilir. Bu performans avantaji sagliyor ama bildigim kadariyla her polinom bu sekilde uygulanamaz. Hangi polinomu sececeginiz data uzunluguna, data icerigine gore degisir. Degisik polinomlar degisik veriler icin daha iyi sonuc verebilirler. Internette ne zaman hangi polinomu secmeniz gerektigine dair yazilar bulabilirisiniz.

Kodunuzda hangi polinomun uygulandigini bilmiyorsaniz anlamaya ugrasmayin. Cunku o, polinoma gore optimize edilmis bir kod. 

Bazen polinomu gelen dataya gore hesaplamak yerine hazir hesaplanmis katsayilar tablo olarak koda eklenir ve bu sekilde kullanilir.

Bu slayt da guzel duruyor.
http://users.ece.cmu.edu/~koopman/pubs/KoopmanCRCWebinar9May2012.pdf (http://users.ece.cmu.edu/~koopman/pubs/KoopmanCRCWebinar9May2012.pdf)
Başlık: Ynt: Checksum algoritması hakkında
Gönderen: engerex - 30 Temmuz 2015, 15:05:16
Checksum (8,16,32 bit) verileri sadece topladığı için çok güvenilir değil. Yani 12345 ile 52341 farklı olsa da değerler toplandığı için aynı sonuç dönecek. Bu yüzden CRC32, MD5 gibi algoritmalar çok çok daha güvenilir.
Başlık: Ynt: Checksum algoritması hakkında
Gönderen: Tagli - 30 Temmuz 2015, 16:28:12
Evet, pardon, CRC ile checksum aynı şey değil. Kavramları karıştırmışım.