Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: baran123 - 04 Eylül 2017, 17:58:46

Başlık: Two's Complement Checksum
Gönderen: baran123 - 04 Eylül 2017, 17:58:46
Dursun lazım olur:)


uint8_t CheckSumControl(uint8_t dataArray[], uint8_t len, uint8_t chk)
{
    uint8_t i;
    uint8_t checkSum = 0;
    uint8_t result = 0;
    uint32_t tmp = 0;
   
    for (i = 0; i < len; i++)
        tmp += dataArray[i];
   
    checkSum = (uint8_t)(tmp & 0x000000FF);
   
    checkSum = ~checkSum;

    checkSum += 1;
   
    result = (checkSum == chk) ? 1 : 0;

    return (result);
}
Başlık: Ynt: Two's Complement Checksum
Gönderen: OptimusPrime - 04 Eylül 2017, 20:48:15
Data ve uzunluk 8 bit ise toplam 255x255 e kadar gidebiliyor demektir. Tmp değişkenini 8 bit ile sinirlarsak overflow dan dolayı bu checksum fonksiyonunun farklı data dizileri için aynı degeri hesaplama ihtimali yüksektir. 16 bitlik olmasi daha güzel olur.
Başlık: Ynt: Two's Complement Checksum
Gönderen: baran123 - 04 Eylül 2017, 23:34:39
Hocam haklısınız.
Benim kullandığım yapıda standart 8 bit olduğu için 8 bit yapım.
Uzunluğa göre düzenlenebilir. :)