1. 程式人生 > >錯誤檢測(1)可靠的數據傳輸

錯誤檢測(1)可靠的數據傳輸

但是 。。 ascii 錯誤 using because del 0ms 最終

本節將演示由於發送方和接收方不能同步時鐘所引起的問題:

Parity 奇偶校驗位

Checksum 校驗和

CRC error detection 循環冗余校驗(Cyclic Redundancy Check)

發送數據的穩定性是依靠error detect 和 error correct 來保證的

Non-return-tozero 不歸零編碼:

技術分享圖片

low就發0 high就發1

transmiter

receiver

Arduino

技術分享圖片

5v 電壓 led接入d3

技術分享圖片

&和 | 既是邏輯運算符也是位運算符,而&&和||只是邏輯運算符。

>> 右移運算符

技術分享圖片

接上示波器

技術分享圖片

再重新傳送數據:

技術分享圖片

看一下1s內發的數據:

技術分享圖片

技術分享圖片

100 1000 (大寫字母H的ASCII編碼

可以看出這裏少了一個bit 這裏只有七位

所以再相左一點點就可以找到這個字節

這個字節是 0100 1000

下一個字節是0110 0101 是e(我們要發hello world。。。

技術分享圖片

下一個字節是 0110 1100

技術分享圖片

接了一個LCD面板: (d4 d5 d6 d7 just four of the data pins

技術分享圖片

技術分享圖片

然後騷操作 安了一個液晶的庫

技術分享圖片

然後開始編碼(define the pins we using

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

這個操作

技術分享圖片

就是輸出完之後就輸出空白

技術分享圖片

技術分享圖片

技術分享圖片

Now we build sth with NRZ encoding

技術分享圖片

Receiver也做好了

技術分享圖片

開始編碼:

技術分享圖片

(pin3 設置為input)

技術分享圖片

繼續

技術分享圖片

。。。

接上:

技術分享圖片

看一下結果:

技術分享圖片

(開始還行 但是傳著傳著就出現亂碼了

檢查一下,transmitter 和 receiver的都是200ms讀/寫一次

我們把這個delay改小一點,改成198吧

技術分享圖片

(結果又亂碼了

Receiver換成196

技術分享圖片

技術分享圖片

(基本都沒事了,但是最後一個字符還是掛掉了)

結論: these delay things is really a bad way to try to synchronize these things .(because you know we really don’t know how much time this processing is going to take

通過手動同時按開關的話基本不能可靠的維持同步

這就是一個不reliable的communication 因為這些東西最終一開始還是同步的 但是最終會不同步

so delay isn’t the right way to ensure…

錯誤檢測(1)可靠的數據傳輸