嵌入式串口同步幀數方法解析,怎樣學(xué)好嵌入式技術(shù)?
嵌入式串口同步幀數方法解析
串口通信是日前單片機和DSP等嵌入式系統之間,以及嵌入式系統與PC機或無(wú)線(xiàn)模塊之間的一種非常重要且普遍使用的通信方式。在嵌入式系統的硬件結構中,通常只有一個(gè)8位或16位的CPU,不僅要完成主流程的工作,同時(shí)還要處理隨時(shí)發(fā)生的各種中斷,因而嵌入式系統中的串口通信程序設計與PC機有很大的不同。若嵌入式系統中.中斷服務(wù)子程序在系統運行過(guò)程中占用了較多的時(shí)間,就有可能在中斷眼務(wù)子程序正運行時(shí),又產(chǎn)生一個(gè)同類(lèi)型或其他類(lèi)型的中斷,從而造成主程序得不到執行或后續中斷數據丟失。所以,嵌入式系統中的串口通信雖然看似簡(jiǎn)單,但其中仍有許多問(wèn)題值得研究,例如串口通信過(guò)程中的幀同步問(wèn)題。本文針對該問(wèn)題給出了逐次比較、基于FIFO隊列和基于狀態(tài)機的3種幀同步方法。通過(guò)測試、分析和比較得出,基于有限狀態(tài)機的方法是嵌入式系統串口通信中很有效的幀同步方法,同時(shí)也是一種很不錯的串口通信程序設計結構。
本文引用地址:http://dyxdggzs.com/article/201710/365210.htm1 串口通信的數據幀結構
現代工業(yè)控制,往往需要由多個(gè)獨立的控制模塊來(lái)共同完成。它們之間通過(guò)串口通信完成復雜的控制過(guò)程,必須在通信過(guò)程中加入必要的通信協(xié)議,以提高系統的可靠性和穩定性;而要完成特定的通信協(xié)議,就得有一定的同步機制。下面介紹一下簡(jiǎn)化的串口通信數據幀結構,以便分析說(shuō)明嵌入式系統串口通信過(guò)程中的幀同步方法。
假定串口發(fā)送的數據幀結構為:
其中:包頭用于同步,一般是一個(gè)或多個(gè)ASCII字符,本文中假定數據幀同步頭有2字節(0xAA、0x55);包長(cháng)表示數據包中除去包頭和包長(cháng)的字節數,一般用約定好的幾個(gè)字節表示;類(lèi)型為通信協(xié)議里規定的命令類(lèi)型;數據為應發(fā)送的主要信息;校驗通常采用單字節“異或”的方法。
2 串口通信中的幀同步方法
2.1 逐次比較的幀同步方法
首先等待串口數據,將接收到的第1個(gè)字節數據與約定好的包頭信息的第1個(gè)字節進(jìn)行比較。如果不正確,則等待新字節,直到接收的數據與包頭信息的第1個(gè)字節相同。第1個(gè)字節比較正確以后,將收到的第2個(gè)字節與包頭信息的第2個(gè)字節進(jìn)行比較。如果仍然正確,則說(shuō)明串口接收已經(jīng)同步,可以開(kāi)始接收數據幀中的數據部分;否則,重新開(kāi)始同步過(guò)程。其程序流程如圖1所示。
此種方法代碼量小,編程簡(jiǎn)單,一般用于在主程序中以非中斷方式接收串口數據、實(shí)時(shí)性很差、數據幀較短的場(chǎng)合。但是,在串口速度過(guò)快且包頭字節數比較多的情況下,串口實(shí)現同步花費的時(shí)間很長(cháng)或很難實(shí)現同步。例如,串口接收到序列Ox0O OxAA0xAA 0x55…,當遇到第一個(gè)“0xAA”時(shí),該方法認為第1個(gè)字節正確開(kāi)始比較第2個(gè)同步頭。第2個(gè)字節仍是“0xAA”而不是“0x55”,所以必須等待新的字節重新開(kāi)始比較第1個(gè)同步頭。而緊隨其后的是“0x55”,因而,此時(shí)包頭的第1個(gè)字節也沒(méi)有同步上。事實(shí)上,“0x00 OxAA”是干擾字節,“0xAA 0x55”才是通信協(xié)議中的同步頭。
怎樣學(xué)好嵌入式技術(shù)?
隨著(zhù)現代社會(huì )信息化進(jìn)程的加快,嵌入式系統被廣泛的地應用于軍事、家用、工業(yè)、商業(yè)、辦公、醫療等社會(huì )各個(gè)方面,表現出很強的投資價(jià)值。從國際范圍來(lái)看,作為數字化電子信息產(chǎn)品核心的嵌入式系統目前其硬件和軟件開(kāi)發(fā)工具市場(chǎng)已經(jīng)突破2000億美元,嵌入式系統帶來(lái)的全球工業(yè)年產(chǎn)值更是達到了一萬(wàn)億美元,隨著(zhù)全球經(jīng)濟的持續增長(cháng)以及信息化的加速發(fā)展,嵌入式系統市場(chǎng)必將進(jìn)一步增長(cháng)。
根據中國物聯(lián)網(wǎng)校企聯(lián)盟的建議,學(xué)習嵌入式系統的必備條件與學(xué)習方法如下:
1、C開(kāi)發(fā)經(jīng)驗
條件:Linux
方法:主要是掌握ANSI C編程(不包括gtk,qt等圖形可視化開(kāi)發(fā))
2、網(wǎng)絡(luò )、操作系統、體系結構
條件:Linux,各種書(shū),算法、例程。
方法:通過(guò)C編程實(shí)現簡(jiǎn)單的網(wǎng)絡(luò )等知識的算法和過(guò)程。
3、嵌入式系統概念
條件:各個(gè)嵌入式網(wǎng)站,討論組,書(shū)籍
方法:少提問(wèn),多留給自己思考的空間。
4、嵌入式開(kāi)發(fā)實(shí)踐
條件:各種嵌入式系統開(kāi)發(fā)工具的demo版,包括編譯器,仿真器。
方法:一個(gè)是基于MCU/MDSP的嵌入式系統開(kāi)發(fā),另一個(gè)是像Palm OS,WinCE,uC/OS II等RTOS下的應用軟件開(kāi)發(fā)。第一個(gè)是針對硬件開(kāi)發(fā)而言的,而第二個(gè)則是針對軟件開(kāi)發(fā)而言的。
5、硬件開(kāi)發(fā)
條件:各種嵌入式芯片、存儲器等電路器件,protel99等電路設計軟件,電路板制作。
方法:這時(shí)候該有開(kāi)發(fā)條件了,最起碼是51系列,這個(gè)比較方便。電路的設計內容較多,不過(guò)看起來(lái)嚇人,實(shí)際上比軟件要簡(jiǎn)單的多。只要下功夫,實(shí)踐會(huì )告訴你一切。
評論