發表文章

目前顯示的是 9月, 2019的文章

Arduino Serail.readString() 解析

圖片
-已Arduino Leonardo為例 -已處理字元,字串為主 -"Arduino Leonardo" 並沒有硬體的UART FIFO Buffer , 所以整個readString()之所以可以暫存字元,是靠中斷轉存字元到宣告的buffer中. 1.Serail.readString()相關的程式在那? Arduino中, UART通訊相關的"Serial"物件實體,主要是實做在"HardwareSerial"類別中,除了"Serail"外,不同的Arduino平台,可能還會有其他同樣是"HardwareSerial"類別的的物件實體以用來支援多組UART. 而"HardwareSerial"類別本身又是繼承自"stream"類別.所以有部分"HardwareSerial"本身有部分的功能已經實作在"stream",另外也有部分的功能還是需要在"HardwareSerial"中實做. 以上圖為例: - "stream"中已實做的方法: "readStream()", "setTimeout()"...等 - "stream"中已宣告為虛擬,需在"HardwareSerial"中實做: "read()","available"...等 - UART專屬功能,需"HardwareSerial"實做: "begin()","rx_complete_irq()" 所以如果想解析"readString()"方法在Arduino中的運作方式,可從分析這些類別所在的相關檔案. 2. Arduino怎麼知道有資料進來了?  硬體buffer只有一個字元,怎麼暫存字串資料?   當UART硬體收到字元(一個BYTE)時,會觸發rx_compl