两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于首尾循環(huán)隊列的串口通信方法

文檔序號:10724846閱讀:519來源:國知局
一種基于首尾循環(huán)隊列的串口通信方法
【專利摘要】本發(fā)明涉及一種基于首尾循環(huán)緩沖隊列的串口通信方法,采用硬件中斷服務(wù)方式處理數(shù)據(jù)接收和發(fā)送任務(wù),以一次只處理一個字節(jié)數(shù)據(jù)的方式將從串口硬件接收數(shù)據(jù)放入首尾循環(huán)的接收緩沖數(shù)據(jù)隊列,以及將數(shù)據(jù)從首尾循環(huán)的發(fā)送緩沖數(shù)據(jù)隊列取出從串口硬件發(fā)送出去;采用命令處理線程從所述接收緩沖數(shù)據(jù)隊列接收到的數(shù)據(jù)中解析命令并執(zhí)行該命令,以及將命令響應(yīng)數(shù)據(jù)放入所述發(fā)送緩沖數(shù)據(jù)隊列。本發(fā)明能夠保證串口命令能夠有最大限度的吞吐量和實時性;命令處理線程在沒有數(shù)據(jù)收發(fā)的時候?qū)嵤┟罱馕龊拖鄳?yīng)數(shù)據(jù)準(zhǔn)備,具有連續(xù)處理數(shù)據(jù)的能力且不影響數(shù)據(jù)的收發(fā)過程。
【專利說明】
一種基于首尾循環(huán)隊列的串口通信方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及串口通信方法,特別涉及一種基于首尾循環(huán)隊列的雙線程串口通信方法,屬于串行通信技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]串口通信是當(dāng)前工業(yè)控制及消費產(chǎn)品領(lǐng)域使用最廣泛的通信方式之一,隨著系統(tǒng)功能的增加及實時控制要求的增加,串口的吞吐量急劇增加,對串口通信實時性的要求也越來越嚴(yán)格,例如在短暫的時間內(nèi)要求響應(yīng)大量條目的串口通信命令,或者要求以較短的時間間隔連續(xù)響應(yīng)持續(xù)不斷的串口命令。
[0003]傳統(tǒng)基于MCU的嵌入式控制系統(tǒng),對串口通信采用單線程接收-解析-響應(yīng)的方式,當(dāng)一次性到來多條串口命令的時候,單線程的設(shè)計必須處理完一條之后才能接收下一條命令,往往造成一條或多條命令沒有接收到;在串口通信的時間間隔很短時,由于MCU處理能力的限制,在下一條命令到來之前無法及時處理上一條命令涉及的所有操作,同樣造成命令響應(yīng)的缺失。為了解決這樣的問題,往往需要更改設(shè)計,使用工作頻率更高的MCU,或者引入操作系統(tǒng)以實現(xiàn)并行處理的能力,這樣必然帶來成本的上升和設(shè)計復(fù)雜度的增加。

【發(fā)明內(nèi)容】

[0004]本發(fā)明的目的在于不更改傳統(tǒng)基于MCU嵌入式控制系統(tǒng)的設(shè)計,但能克服現(xiàn)有技術(shù)的不足,使用一種基于首尾循環(huán)緩沖隊列的串口通信方法,以較低的成本和簡單的設(shè)計提供串口通信較高的吞吐量和實時性能力。
[0005]本發(fā)明提供一種基于首尾循環(huán)緩沖隊列的串口通信的方法,創(chuàng)建數(shù)據(jù)收發(fā)線程,其采用硬件中斷服務(wù)方式處理數(shù)據(jù)接收和發(fā)送任務(wù),以一次只處理一個字節(jié)數(shù)據(jù)的方式將從串口硬件接收數(shù)據(jù)放入首尾循環(huán)的接收緩沖數(shù)據(jù)隊列,以及將數(shù)據(jù)從首尾循環(huán)的發(fā)送緩沖數(shù)據(jù)隊列取出從串口硬件發(fā)送出去;創(chuàng)建命令處理線程,其從所述接收緩沖數(shù)據(jù)隊列接收到的數(shù)據(jù)中解析命令并執(zhí)行該命令,以及將命令響應(yīng)數(shù)據(jù)放入所述發(fā)送緩沖數(shù)據(jù)隊列。
[0006]在上述技術(shù)方案中,所述數(shù)據(jù)收發(fā)線程的具體步驟包括:
[0007]步驟1.1,觸發(fā)串口硬件中斷時,查看是不是接收中斷,如果“是”則進(jìn)入步驟1.2;如果“否”則表明是發(fā)送中斷,進(jìn)入步驟1.4;
[0008]步驟1.2,從串口硬件接收一個字節(jié),存放在所述接收緩沖數(shù)據(jù)隊列的隊尾,并查看所述接收緩沖數(shù)據(jù)隊列的隊尾位置是否已經(jīng)到達(dá)所述接收緩沖數(shù)據(jù)隊列的最后一個字節(jié),如果“是”則進(jìn)入步驟1.3;如果“否”則將所述接收緩沖數(shù)據(jù)隊列的隊尾指向所述接收緩沖數(shù)據(jù)隊列中的下一個字節(jié),進(jìn)入步驟I.6;
[0009]步驟1.3,將所述接收緩沖數(shù)據(jù)隊列的隊尾指向所述接收緩沖數(shù)據(jù)隊列中的第一個字節(jié),并給出接收緩沖數(shù)據(jù)隊列溢出的標(biāo)識,進(jìn)入步驟1.6;
[0010]步驟1.4,從所述發(fā)送緩沖數(shù)據(jù)隊列的隊首取出一個字節(jié),通過串口硬件發(fā)送出去,并查看所述發(fā)送緩沖數(shù)據(jù)隊列的隊首位置是否已經(jīng)到達(dá)所述發(fā)送緩沖數(shù)據(jù)隊列的最后一個字節(jié),如果“是”則進(jìn)入步驟1.5;如果“否”則將所述發(fā)送緩沖數(shù)據(jù)隊列的隊尾指向所述發(fā)送緩沖數(shù)據(jù)隊列中的下一個字節(jié),進(jìn)入步驟1.6;
[0011]步驟1.5,將所述發(fā)送緩沖數(shù)據(jù)隊列的隊尾指向所述發(fā)送緩沖數(shù)據(jù)隊列中的第一個字節(jié),并給出發(fā)送緩沖數(shù)據(jù)隊列溢出的標(biāo)識;
[0012]步驟1.6,完成本次串口硬件中斷操作。
[0013]在上述技術(shù)方案中,所述命令處理線程的具體步驟包括:
[0014]步驟2.1,查看所述接收緩沖數(shù)據(jù)隊列中是否有未處理的內(nèi)容,如果“是”則進(jìn)入步驟2.2;如果“否”則認(rèn)為沒有需要處理的內(nèi)容,無需創(chuàng)建命令處理任務(wù),進(jìn)入步驟2.5;
[0015]步驟2.2,判斷能否從所述接收緩沖數(shù)據(jù)隊列中取出一條完整命令,如果“是”則進(jìn)入步驟2.3;如果“否”則認(rèn)為沒有完整的命令處理任務(wù),進(jìn)入步驟2.5;
[0016]步驟2.3,從所述接收緩沖數(shù)據(jù)隊列取出一條完整命令并解析,根據(jù)該命令準(zhǔn)備響應(yīng)的數(shù)據(jù)生成響應(yīng)命令,并將響應(yīng)命令推送到所述發(fā)送緩沖數(shù)據(jù)隊列,產(chǎn)生發(fā)送中斷;
[0017]步驟2.4,按照步驟2.3解析的命令,執(zhí)行相應(yīng)操作,然后再次轉(zhuǎn)到步驟2.1;
[0018]步驟2.5,完成本次命令處理操作。
[0019]本發(fā)明取得了以下技術(shù)效果:可以解決串口短時間接收到大量數(shù)據(jù),或者以較短間隔持續(xù)收到數(shù)據(jù)的問題,同時也能夠及時解析命令并發(fā)送響應(yīng),保證設(shè)計具有較好的實時性。本發(fā)明能夠克服當(dāng)前普通串口通信的缺點,在不需要升級硬件配置或更改硬件設(shè)計的條件下,能夠以簡單的方法使串口通信的實時性和吞吐能力的得到顯著的提高。
【附圖說明】
[0020]圖1是中斷服務(wù)線程的流程圖。
[0021 ]圖2是命令處理線程的流程圖。
【具體實施方式】
[0022]為了便于本領(lǐng)域普通技術(shù)人員理解和實施本發(fā)明,下面結(jié)合附圖及【具體實施方式】對本發(fā)明作進(jìn)一步的詳細(xì)描述。
[0023]本發(fā)明對現(xiàn)有串口通信的改進(jìn)主要包括三個部分:將串口通信的任務(wù)分為數(shù)據(jù)的收發(fā)和命令處理兩部分,分別由兩個線程完成;串口數(shù)據(jù)的接收和發(fā)送采用中斷服務(wù)線程且一次只處理一個字節(jié);接收和發(fā)送的數(shù)據(jù)分別使用首尾循環(huán)的緩沖數(shù)據(jù)隊列進(jìn)行存放。
[0024]將串口通信的任務(wù)分為數(shù)據(jù)的收發(fā)和命令處理兩部分,分別由兩個線程完成,是在不需要升級硬件配置或更改硬件設(shè)計的條件下,在軟件設(shè)計上將串口通信分成兩個子任務(wù),數(shù)據(jù)收發(fā)任務(wù)由數(shù)據(jù)收發(fā)線程處理,采用硬件中斷響應(yīng)的方式;命令解析和響應(yīng)任務(wù)由命令處理線程承擔(dān),可以是主程序里面的一個子程序,或主進(jìn)程里面的一個子線程形式等方式實現(xiàn)。數(shù)據(jù)收發(fā)線程作為中斷服務(wù)線程,負(fù)責(zé)在有數(shù)據(jù)收發(fā)的時候及時實施,保證通信的實時性;命令處理線程,負(fù)責(zé)將串口接收數(shù)據(jù)的意義予以解析,并準(zhǔn)備好命令響應(yīng)的數(shù)據(jù),提供給數(shù)據(jù)收發(fā)線程通過串口發(fā)送。這樣的雙線程設(shè)計使串口通信具有了一定的并行處理能力,有效解決數(shù)據(jù)收發(fā)和命令解析之間相互影響的問題。
[0025]串口數(shù)據(jù)的接收和發(fā)送采用中斷服務(wù)線程且一次只處理一個字節(jié),中斷服務(wù)線程的流程如圖1所示,其具體實施步驟如下:
[0026]步驟1.0,創(chuàng)建一個中斷服務(wù)線程,用于處理串口收發(fā)相關(guān)事務(wù);
[0027]步驟1.1,發(fā)生串口硬件中斷時,查看是不是接收中斷,如果“是”則進(jìn)入步驟1.2;如果“否”表明是發(fā)送中斷,進(jìn)入步驟1.4;
[0028]步驟1.2,從串口硬件接收一個字節(jié),存放在接收隊列的隊尾,并查看接收隊尾位置是否已經(jīng)到達(dá)接收隊列的最后一個字節(jié),如果“是”則進(jìn)入步驟1.3;如果“否”,則將接收隊尾指向接收隊列中的下一個字節(jié),進(jìn)入步驟I.6;
[0029]步驟1.3,將接收隊尾指向接收隊列中的第一個字節(jié),并給出接收隊列溢出的標(biāo)識,進(jìn)入步驟1.6;
[0030]步驟1.4,從發(fā)送隊列的隊首取出一個字節(jié),通過硬件發(fā)送,并查看發(fā)送隊首位置是否已經(jīng)到達(dá)發(fā)送隊列的最后一個字節(jié),如果“是”則進(jìn)入步驟1.5;如果“否”,則將發(fā)送隊尾指向發(fā)送隊列中的下一個字節(jié),進(jìn)入步驟1.6;
[0031]步驟1.5,將發(fā)送隊尾指向發(fā)送隊列中的第一個字節(jié),并給出發(fā)送隊列溢出的標(biāo)識;
[0032]步驟1.6,完成本次中斷操作,退出中斷服務(wù)線程。
[0033]接收和發(fā)送的數(shù)據(jù)放入首尾循環(huán)的緩沖隊列,命令處理線程的流程如圖2所示,包括以下步驟,
[0034]步驟2.0,創(chuàng)建一個命令處理線程,用于解析串口接收的命令,并準(zhǔn)備命令響應(yīng)的數(shù)據(jù);
[0035]步驟2.1,查看接收隊列中是否有未處理的內(nèi)容,如果“是”則進(jìn)入步驟2.2;如果“否”,認(rèn)為沒有需要處理的內(nèi)容,無需創(chuàng)建命令處理任務(wù),進(jìn)入步驟2.5;
[0036]步驟2.2,判斷能否從接收隊列中取出一條完整命令,如果“是”則進(jìn)入步驟2.3;如果“否”,認(rèn)為沒有完整的命令處理任務(wù),進(jìn)入步驟2.5;
[0037]步驟2.3,從接收隊列取出一條完整命令并解析,根據(jù)命令準(zhǔn)備響應(yīng)的數(shù)據(jù)生成響應(yīng)命令,并將響應(yīng)命令推送到發(fā)送隊列,產(chǎn)生發(fā)送中斷;
[0038]步驟2.4,按照步驟2.3解析的命令,執(zhí)行相應(yīng)的算法或硬件操作等,然后再次轉(zhuǎn)到步驟2.1;
[0039]步驟2.5,完成本次命令處理操作,退出命令處理線程。
[0040]這種命令處理的實現(xiàn)方式,可以解決串口在短時間內(nèi)接收到大量數(shù)據(jù)或者以較短間隔持續(xù)接收到數(shù)據(jù)時難以及時接收和處理所有數(shù)據(jù)的問題,同時也能夠及時解析命令并發(fā)送響應(yīng),保證具有較好的實時性。
[0041]需要強調(diào)的是,本發(fā)明所述的實施例是說明性的,而不是限定性的,因此本發(fā)明并不限于【具體實施方式】中所述的實施例,凡是由本領(lǐng)域技術(shù)人員這樣根據(jù)本發(fā)明的技術(shù)方案得出的其他實施方式,同樣屬于本發(fā)明保護的范圍。
【主權(quán)項】
1.一種基于首尾循環(huán)緩沖隊列的串口通信的方法,其特征在于: 創(chuàng)建數(shù)據(jù)收發(fā)線程,其采用硬件中斷服務(wù)方式處理數(shù)據(jù)接收和發(fā)送任務(wù),以一次只處理一個字節(jié)數(shù)據(jù)的方式將從串口硬件接收數(shù)據(jù)放入首尾循環(huán)的接收緩沖數(shù)據(jù)隊列,以及將數(shù)據(jù)從首尾循環(huán)的發(fā)送緩沖數(shù)據(jù)隊列取出從串口硬件發(fā)送出去; 創(chuàng)建命令處理線程,其從所述接收緩沖數(shù)據(jù)隊列接收到的數(shù)據(jù)中解析命令并執(zhí)行該命令,以及將命令響應(yīng)數(shù)據(jù)放入所述發(fā)送緩沖數(shù)據(jù)隊列。2.根據(jù)權(quán)利要求1所述的基于首尾循環(huán)緩沖隊列的串口通信的方法,其特征在于:所述數(shù)據(jù)收發(fā)線程的具體步驟包括: 步驟1.1,觸發(fā)串口硬件中斷時,查看是不是接收中斷,如果“是”則進(jìn)入步驟1.2;如果“否”則表明是發(fā)送中斷,進(jìn)入步驟1.4; 步驟1.2,從串口硬件接收一個字節(jié),存放在所述接收緩沖數(shù)據(jù)隊列的隊尾,并查看所述接收緩沖數(shù)據(jù)隊列的隊尾位置是否已經(jīng)到達(dá)所述接收緩沖數(shù)據(jù)隊列的最后一個字節(jié),如果“是”則進(jìn)入步驟1.3;如果“否”則將所述接收緩沖數(shù)據(jù)隊列的隊尾指向所述接收緩沖數(shù)據(jù)隊列中的下一個字節(jié),進(jìn)入步驟1.6; 步驟1.3,將所述接收緩沖數(shù)據(jù)隊列的隊尾指向所述接收緩沖數(shù)據(jù)隊列中的第一個字節(jié),并給出接收緩沖數(shù)據(jù)隊列溢出的標(biāo)識,進(jìn)入步驟1.6; 步驟1.4,從所述發(fā)送緩沖數(shù)據(jù)隊列的隊首取出一個字節(jié),通過串口硬件發(fā)送出去,并查看所述發(fā)送緩沖數(shù)據(jù)隊列的隊首位置是否已經(jīng)到達(dá)所述發(fā)送緩沖數(shù)據(jù)隊列的最后一個字節(jié),如果“是”則進(jìn)入步驟1.5;如果“否”則將所述發(fā)送緩沖數(shù)據(jù)隊列的隊尾指向所述發(fā)送緩沖數(shù)據(jù)隊列中的下一個字節(jié),進(jìn)入步驟1.6; 步驟1.5,將所述發(fā)送緩沖數(shù)據(jù)隊列的隊尾指向所述發(fā)送緩沖數(shù)據(jù)隊列中的第一個字節(jié),并給出發(fā)送緩沖數(shù)據(jù)隊列溢出的標(biāo)識; 步驟1.6,完成本次串口硬件中斷操作。3.根據(jù)權(quán)利要求1所述的基于首尾循環(huán)緩沖隊列的串口通信的方法,其特征在于:所述命令處理線程的具體步驟包括: 步驟2.1,查看所述接收緩沖數(shù)據(jù)隊列中是否有未處理的內(nèi)容,如果“是”則進(jìn)入步驟.2.2;如果“否”則認(rèn)為沒有需要處理的內(nèi)容,無需創(chuàng)建命令處理任務(wù),進(jìn)入步驟2.5; 步驟2.2,判斷能否從所述接收緩沖數(shù)據(jù)隊列中取出一條完整命令,如果“是”則進(jìn)入步驟2.3;如果“否”則認(rèn)為沒有完整的命令處理任務(wù),進(jìn)入步驟2.5; 步驟2.3,從所述接收緩沖數(shù)據(jù)隊列取出一條完整命令并解析,根據(jù)該命令準(zhǔn)備響應(yīng)的數(shù)據(jù)生成響應(yīng)命令,并將響應(yīng)命令推送到所述發(fā)送緩沖數(shù)據(jù)隊列,產(chǎn)生發(fā)送中斷; 步驟2.4,按照步驟2.3解析的命令,執(zhí)行相應(yīng)操作,然后再次轉(zhuǎn)到步驟2.1; 步驟2.5,完成本次命令處理操作。
【文檔編號】G06F13/42GK106095716SQ201610474485
【公開日】2016年11月9日
【申請日】2016年6月24日
【發(fā)明人】楊智
【申請人】武漢光迅科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
利川市| 扶余县| 东丰县| 东港市| 山西省| 集贤县| 自治县| 翁牛特旗| 玉溪市| 黄山市| 应用必备| 凤冈县| 灵台县| 扶余县| 高阳县| 潢川县| 谢通门县| 洞头县| 利辛县| 江口县| 丹寨县| 嘉峪关市| 根河市| 内黄县| 防城港市| 惠州市| 公安县| 万安县| 肥西县| 同江市| 和平县| 龙口市| 高邮市| 藁城市| 达拉特旗| 郁南县| 开化县| 博乐市| 佛坪县| 远安县| 海伦市|