CRC'nin hesaplama sürecini gerçekten anlıyor musunuz?

Bir omuz kazanın sırt çantası

Bu ne kadar zor?

Bir şans ver!

_

Uzun basın tanıma

Baidu ile ilgili CRC hesaplama ilkelerini ve yöntemlerini tanıtan makale büyük bir itici güç.Belki saatlerce harcadıktan sonra onu anlayamayacak kadar aptaldım. Sonunda, sürekli deneme ve araştırmadan sonra, nihayet tüm hesaplama sürecini çözdüm. Özetlemek için bir kayıt yapın. . .

Hemen konuya gidelim: İnternette CRC'yi hesaplamak, aynı verileri girmek, aynı algoritmayı seçmek ve aynı sonucu almak için iki yazılım buldum.

İki yazılım arasındaki karşılık gelen ilişki aşağıdaki gibidir:

Bu parametreleri CRC Hesap Makinesi Bilgisinde anladıktan sonra, CRC sürecini anlayacaksınız.

İsim: Algoritmanın adıdır.Örneğin, 16-bit CRC için pek çok isim vardır, yani 16-bit CRC zahmetli olmasına rağmen birçok hesaplama yöntemi vardır.

Genişlik: CRC kontrol değerinin uzunluğunu ifade eder, genellikle 8 bit, 16 bit, 24 bit, 32 bit vb.

Poly: bir polinomun değeridir.Yukarıdaki şekildeki CRC-8: x8 + x2 + x + 1'i örnek olarak alın, bu ikili sistemin 1000000111 olduğu anlamına gelir,

En anlamlı 1'i kaldırın ve onaltılık gösterim 0x07'dir.

Init: Init'in basamak sayısı Poly ile aynıdır.Değeri tamamen 0 veya tümü F'dir.Tüm 0 olduğunda, algoritma başlamadan önce verilere CRC ekleyin (bu veriler RefIn değerine göre elde edilir) Hane sayısı 0 olduktan sonra, sonraki hesaplamalar yapılabilir. Hepsi 1 olduğunda, verilerin ilk CRC basamaklarının (yüksek bitlerin) algoritma başlamadan önce karşılık gelenlerle XOR'landığı (yani, ilk CRC basamaklarının değeri bit ile ters çevrilir) ve sonra eklendiği anlamına gelir. CRC rakamları sonraki hesaplamadan önce 0'dır.

RefIn ve Refout: Hepsi False veya Hepsi True,

RefIn False, yani giriş ham verisinin her bir baytının 7. bitinin en önemli bit olarak kabul edildiği ve 0. bitin en az anlamlı bit olarak kabul edildiği, yani normal hesaplamanın yeterli olduğu anlamına gelir.

RefIn True olduğunda, giriş orijinal verilerinin her bir baytının ters sırada işlenmesi gerekir Not: Tüm veriler için değil, her bayt için örnek olarak 4 baytlık bir orijinal veri alın:

Refout False olduğunda, çıktı işlenmez Refout True olduğunda, çıktı verisinin tüm verinin tersi sırasına göre işlenmesi gerekir Not: Buradaki ters sıra RefIn'den farklıdır. Bayt ters sırada değil ters sırada. Örnek olarak CRC-32'yi ele alalım, son veri 32 bittir, Refout True olduğunda kapak aşağıdaki gibidir:

XorOut: Yukarıdaki parametrelere göre hesaplama yaptıktan sonra bu numara ile özel bir VEYA gerçekleştirmek anlamına gelir.

Yukarıdaki 0x79 sonucunun kökenini inceleyelim:

1) 0x13, ikili olarak 00010011'e karşılık gelir

2) RefIn False olduğundan, 0x13 işlenmez veya 00010011

3) Init 0x00 olduğundan, 00010011'den sonra 80s ekleyin, giriş verisi 0001001100000000 olur

4) Polinom, ikili 100000111'e karşılık gelen x8 + x2 + x + 1'dir ve yukarıdaki 0001001100000000, polinoma karşılık gelen 100000111'e bölünür.

Tüm hesaplama süreci aşağıdaki gibidir:

10011 QUOTIENT

_________________

100000111) 0001001100000000 TEMETTÜ

BÖLÜM) 100000111

-------------

110111000

100000111

--------- XOR işlemi

101111110

100000111

---------

01111001 HATIRLATICI

Not: Yukarıdaki hesaplama, olağan bölme işleminde kullanılan çıkarma işlemini kullanmaz, burada çıkarma, özel VEYA ile değiştirilir.

Sonunda kalanı alın: 01111001

7) RefOuT False olduğundan, geri kalan değişmeden kalır ve hala 01111001'dir.

8) Xorout 0 olduğundan, tersine çevirmeye gerek olmadığı anlamına gelir, bu nedenle nihai sonuç, onaltılık 0x79 olan 01111001'dir.

Birini saymak yeterli değil, bir tane daha hesaplayalım

Bu sefer yukarıdakilerden tek fark, başlangıç değerinin orijinal 0x00'den 0xFF'ye değiştirilmesidir.Evet, bu örnek size başlangıç değerinin gerçekte ne anlama geldiğini gösterecektir.

3) Init 0xFF olduğundan, 00010011'in üstteki 8 biti önce 0xFF ile XORed edilmelidir, giriş verisi 11101100 olur ve sonra 80s eklenir ve 1110110000000000 olur

4) Polinom, ikili 100000111'e karşılık gelen x8 + x2 + x + 1'dir, yukarıdaki 1110110000000000'ü polinoma karşılık gelen 100000111'e bölün

Tüm hesaplama süreci aşağıdaki gibidir:

11101110 KONTEYNER

_________________

100000111) 1110110000000000 TEMETTÜ

110111110

101110010

111010100

110100110

101000010

10001010

00000000

---------

10001010 HATIRLATICI

Sonunda kalanı alın: 10001010

7) RefOuT False olduğundan, geri kalan değişmeden kalır ve halen 10001010

8) Xorout 0 olduğundan, tersine çevirmeye gerek olmadığı anlamına gelir, bu nedenle nihai sonuç, onaltılık 0x8A olan 10001010'dur.

Bu örnek, başlangıç değerinin anlamını gösterir, son örneğe bakalım, bu örnek RefIn ve RefOut'un özel anlamını True olarak göstermektedir.

1) 0x13, ikili olarak 00010011'e karşılık gelir

2) RefIn True olduğundan, 11001000 elde etmek için 0x13'ün ters çevrilmesi gerekir

3) Init 0x00 olduğundan, 2) 11001000'den sonra 40s ekleyin ve 110010000000 elde edin

4) Polinom, ikili 10011'e karşılık gelen x4 + x + 1'dir, yukarıdaki 110010000000'i 10011'e bölün

Tüm hesaplama süreci aşağıdaki gibidir:

11011110 KONTENJAN

______________

10011) 110010000000 TEMETTÜ

DİVİZÖR) 10011

-------------

10100

10011

---------

11100

11110

11010

10010

00010

00000

---------

0010 HATIRLATICI

Sonunda kalanı alın: 0010

7) RefOuT True olduğundan, kalanın 0100'e çevrilmesi gerekir

8) Xorout 0 olduğundan, tersine çevirmeye gerek olmadığı anlamına gelir, bu nedenle nihai sonuç 0100 olur

Yukarıda bahsedilen hesaplama sürecini anlarsanız, CRC'nin hesaplama ilkesinin netleşeceğine inanıyorum. Yazılım kodunun nasıl uygulanacağına gelince, bunu daha sonra tartışacağım. Kinetis MCU'lar için, birçok MCU'nun entegre donanım CRC modülleri vardır.CRC sonuçlarını hesaplamak için sadece konfigürasyon kayıtlarını yapılandırmanız gerekir. Ancak ister yazılım ister donanım uygulaması olsun, teorik temel her zaman ilktir.

Zekâ satmayı bir oyun olarak görüyorum, sadece Yui Aragaki'ye hizmet ediyorum
önceki
Bilibili'nin ilk "Monster Hunter World" yarış yarışması başlamak üzere
Sonraki
Tüm cinsel saldırı deneyimini bu şok edici başlangıcına koydu.
"Muhteşem Doğu Eğilimi, Yeni Bir Çağda Gayret" 40 Yıllık Reformu Kutlayan ve Açılan Fotoğraf Yarışması Seçilmiş Eserleri Luo Kaifen'in "Zaman Hafızası"
Pekiştirmeli öğrenme örneklemesi nasıl kolaylaştırılır? Cambridge Üniversitesi ve Google Berkeley, Q-Prop'i öneriyor | ICLR 2017
Hafta sonları hangi filmleri izleyecek | Ma Yili gözlerini ayıramaz ama Xiaosan Wu Yue azarlandı ve yorum yapıldı. 30 yaş üstü kadınlar gerçekten korkunç
Paralel işleme teknolojisine dayalı geniş bant DSSS sinyal toplama yöntemi
Canlı gösteriye ek olarak, sabit diskteki Victoria's Secret Angels daha seksi
Bu "Monster Hunter World" kişileştirmesi çok iyi, tekrar tavsiye edeceğim
Airbnb, Çin pazarına giren yabancı şirketlerin lanetini kırabilir mi?
"Dunkirk" dünya prömiyeri Londra'da başlıyor, Prens Harry desteğe geliyor
Azarlanmayı tercih ederim, gelip onları en iyi Japon animasyon kardeşi kim olduğunu yıkmalıyım
STC12 mikro denetleyiciye dayalı kablosuz bir darbe izleme sistemi
Xiao Yanghua, Fudan Üniversitesi: 12306'nın doğrulama kodu artık güvenli değil ve gelecekte akıllı bir doğrulama kodu olacak
To Top