本發(fā)明涉及嵌入式系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種非對(duì)稱處理系統(tǒng)下多核共用串口的方法及系統(tǒng)。
背景技術(shù):
在嵌入式多核系統(tǒng)領(lǐng)域,存在兩種技術(shù),一是AMP(Asymmetric Multi-Processing)非對(duì)稱多處理,另外一種是SMP(Symmetric Multi Processing)對(duì)稱多處理。SMP系統(tǒng)上的每個(gè)CPU共享系統(tǒng)所有資源,包括串口在內(nèi),SMP系統(tǒng)只要一個(gè)控制臺(tái)就夠了。而AMP每個(gè)CPU有獨(dú)立的運(yùn)行代碼,任務(wù)的調(diào)度也是獨(dú)立的,對(duì)整個(gè)系統(tǒng)資源的訪問(wèn)也是互斥的,每個(gè)CPU上運(yùn)行的操作系統(tǒng)(OS)甚至完全不一樣,這樣完全有必要為每個(gè)CPU配置一個(gè)console(控制臺(tái))。在vxworks上支持這種功能,MSD(MIPC Serial Devices)組件完整實(shí)現(xiàn)了主從CPU共用串口的功能,該功能基于MIPC(Multi-OS IPC)多操作系統(tǒng)之間進(jìn)程通信之上,功能完善,實(shí)現(xiàn)代碼量大,配置也很復(fù)雜。從核所在的MSD節(jié)點(diǎn)要I/O完全依賴于主核節(jié)點(diǎn),統(tǒng)一與tty驅(qū)動(dòng)交互并實(shí)現(xiàn)I/O。如果主核tty驅(qū)動(dòng)阻塞或者主核節(jié)點(diǎn)阻塞或者故障,那么所有的從核節(jié)點(diǎn)I/O都被阻塞或者故障。
因此,現(xiàn)有技術(shù)還有待于改進(jìn)和發(fā)展。
技術(shù)實(shí)現(xiàn)要素:
鑒于現(xiàn)有技術(shù)的不足,本發(fā)明目的在于提供一種非對(duì)稱處理系統(tǒng)下多核共用串口的方法及系統(tǒng),旨在解決現(xiàn)有技術(shù)中從核所在的節(jié)點(diǎn)要輸入或輸出信息完全依賴于主核節(jié)點(diǎn),統(tǒng)一與驅(qū)動(dòng)交互實(shí)現(xiàn)輸入或輸出;如果主核驅(qū)動(dòng)阻塞或者主核節(jié)點(diǎn)阻塞或者故障,那么所有的從核節(jié)點(diǎn)輸入或輸出都被阻塞或者故障的技術(shù)問(wèn)題。
本發(fā)明的技術(shù)方案如下:
一種非對(duì)稱處理系統(tǒng)下多核共用串口的方法,其中,方法包括:
A、主核處理器和從核處理器分別對(duì)串口的通信參數(shù)進(jìn)行配置,并分別設(shè)置主核處理器的串口驅(qū)動(dòng)方式和從核處理器的串口驅(qū)動(dòng)方式;
B、主核處理器和從核處理器啟動(dòng)完成后,主核處理器根據(jù)主核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息;
C、當(dāng)檢測(cè)到從核處理器的驅(qū)動(dòng)串口使能命令時(shí),主核處理器關(guān)閉主核串口驅(qū)動(dòng);
D、從核處理器根據(jù)從核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的方法,其中,所述A中主核處理器和從核處理器分別對(duì)串口的通信參數(shù)進(jìn)行配置具體包括:
A11、主核處理器對(duì)串口的波特率、奇偶校驗(yàn)位、數(shù)據(jù)位、輸入頻率進(jìn)行配置;
A12、從核處理器對(duì)串口的波特率、奇偶校驗(yàn)位、數(shù)據(jù)位、輸入頻率進(jìn)行配置。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的方法,其中,所述A中分別設(shè)置主核處理器的串口驅(qū)動(dòng)方式和從核處理器的串口驅(qū)動(dòng)方式具體包括:
A21、設(shè)置主核處理器的串口驅(qū)動(dòng)方式為中斷收發(fā)包方式,每次收到或發(fā)送一個(gè)字符發(fā)生一次中斷;
A22、設(shè)置從核處理器的串口驅(qū)動(dòng)方式為輪詢方式,通過(guò)查詢從核使用串口的標(biāo)識(shí)的值進(jìn)行輸入或輸出字符。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的方法,其中,所述A之前還包括:
S、預(yù)先設(shè)置一個(gè)從核使用串口的標(biāo)識(shí),當(dāng)允許從核使用串口時(shí),從核使用串口的標(biāo)識(shí)的值為真;當(dāng)不允許從核使用串口時(shí),從核使用串口的標(biāo)識(shí)的值為假。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的方法,其中,所述步驟C具體包括:
C1、當(dāng)從核處理器使用串口時(shí),主核控制從核使用串口的標(biāo)識(shí)的值為真;
C2、當(dāng)檢測(cè)到從核使用串口的標(biāo)識(shí)的值為真時(shí),主核處理器關(guān)閉主核串口驅(qū)動(dòng),不驅(qū)動(dòng)硬件。
一種非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng),其中,系統(tǒng)包括:
參數(shù)配置模塊,用于主核處理器和從核處理器分別對(duì)串口的通信參數(shù)進(jìn)行配置,并分別設(shè)置主核處理器的串口驅(qū)動(dòng)方式和從核處理器的串口驅(qū)動(dòng)方式;
第一串口驅(qū)動(dòng)模塊,用于主核處理器和從核處理器啟動(dòng)完成后,主核處理器根據(jù)主核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息;
檢測(cè)與控制模塊,用于當(dāng)檢測(cè)到從核處理器的驅(qū)動(dòng)串口使能命令時(shí),主核處理器關(guān)閉主核串口驅(qū)動(dòng);
第二串口驅(qū)動(dòng)模塊,用于從核處理器根據(jù)從核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng),其中,所述參數(shù)配置模塊具體包括:
第一串口參數(shù)配置單元,用于主核處理器對(duì)串口的波特率、奇偶校驗(yàn)位、數(shù)據(jù)位、輸入頻率進(jìn)行配置;
第二串口參數(shù)配置單元,用于從核處理器對(duì)串口的波特率、奇偶校驗(yàn)位、數(shù)據(jù)位、輸入頻率進(jìn)行配置。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng),其中,所述參數(shù)配置模塊還包括:
第一串口驅(qū)動(dòng)方式設(shè)置單元,用于設(shè)置主核處理器的串口驅(qū)動(dòng)方式為中斷收發(fā)包方式,每次收到或發(fā)送一個(gè)字符發(fā)生一次中斷;
第二串口驅(qū)動(dòng)方式設(shè)置單元,用于設(shè)置從核處理器的串口驅(qū)動(dòng)方式為輪詢方式,通過(guò)查詢從核使用串口的標(biāo)識(shí)的值進(jìn)行輸入或輸出字符。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng),其中,所述系統(tǒng)還包括:
預(yù)先設(shè)置模塊,用于預(yù)先設(shè)置一個(gè)從核使用串口的標(biāo)識(shí),當(dāng)允許從核使用串口時(shí),從核使用串口的標(biāo)識(shí)的值為真;當(dāng)不允許從核使用串口時(shí),從核使用串口的標(biāo)識(shí)的值為假。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng),其中,所述第一串口驅(qū)動(dòng)模塊具體包括:
第一控制單元,用于當(dāng)從核處理器使用串口時(shí),主核控制從核使用串口的標(biāo)識(shí)的值為真;
第二控制單元,用于當(dāng)檢測(cè)到從核使用串口的標(biāo)識(shí)的值為真時(shí),主核處理器關(guān)閉主核串口驅(qū)動(dòng),不驅(qū)動(dòng)硬件。
本發(fā)明提供了一種非對(duì)稱處理系統(tǒng)下多核共用串口的方法及系統(tǒng),本發(fā)明可以實(shí)現(xiàn)在非對(duì)稱處理系統(tǒng)下,實(shí)現(xiàn)主從核共用一個(gè)串口,主從核的串口驅(qū)動(dòng)互不相干,且不影響系統(tǒng)的穩(wěn)定性,提高了串口的利用效率。
附圖說(shuō)明
圖1為本發(fā)明的一種非對(duì)稱處理系統(tǒng)下多核共用串口的方法的較佳實(shí)施例的流程圖。
圖2為圖1中步驟S100的具體實(shí)施例一的細(xì)化步驟流程圖。
圖3為圖1中步驟S100的具體實(shí)施例二的細(xì)化步驟流程圖。
圖4為圖1中步驟S300的具體實(shí)施例三的細(xì)化步驟流程圖。
圖5為本發(fā)明的一種非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng)的較佳實(shí)施例的功能原理框圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案及效果更加清楚、明確,以下對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供了一種非對(duì)稱處理系統(tǒng)下多核共用串口的方法的較佳實(shí)施例的流程圖,如圖1所示,其中,方法包括:
步驟S100、主核處理器和從核處理器分別對(duì)串口的通信參數(shù)進(jìn)行配置,并分別設(shè)置主核處理器的串口驅(qū)動(dòng)方式和從核處理器的串口驅(qū)動(dòng)方式。
具體實(shí)施時(shí),如圖2所示,步驟S100中主核處理器和從核處理器分別對(duì)串口的通信參數(shù)進(jìn)行配置具體包括:
步驟S111、主核處理器對(duì)串口的波特率、奇偶校驗(yàn)位、數(shù)據(jù)位、輸入頻率進(jìn)行配置;
步驟S112、從核處理器對(duì)串口的波特率、奇偶校驗(yàn)位、數(shù)據(jù)位、輸入頻率進(jìn)行配置。
進(jìn)一步的實(shí)施例中,如圖3所示,步驟S100中分別設(shè)置主核處理器的串口驅(qū)動(dòng)方式和從核處理器的串口驅(qū)動(dòng)方式具體包括:
步驟S121、設(shè)置主核處理器的串口驅(qū)動(dòng)方式為中斷收發(fā)包方式,每次收到或發(fā)送一個(gè)字符發(fā)生一次中斷;
步驟S122、設(shè)置從核處理器的串口驅(qū)動(dòng)方式為輪詢方式,通過(guò)查詢從核使用串口的標(biāo)識(shí)的值進(jìn)行輸入或輸出字符。
具體實(shí)施時(shí),整個(gè)系統(tǒng)上存在一個(gè)物理串口(UART),主核對(duì)串口進(jìn)行完整配置,包括波特率,奇偶校驗(yàn)位,數(shù)據(jù)位,輸入頻率等,主核串口驅(qū)動(dòng)工作方式為中斷收發(fā)包方式,每收到或者發(fā)送一個(gè)字符都會(huì)產(chǎn)生中斷。
從核初始化串口時(shí),不對(duì)串口進(jìn)行任何硬件配置,使用的波特率也與主核配置完全一樣,也不掛載中斷服務(wù)程序,初始化函數(shù)直接返回成功,在tty驅(qū)動(dòng)在設(shè)備節(jié)點(diǎn)中注冊(cè)成功后,調(diào)用ioctl函數(shù)通過(guò)命令SIO_MODE_SET + SIO_MODE_POLL設(shè)置該設(shè)備使用輪詢方式。
進(jìn)一步的實(shí)施例中,步驟S100之前還包括:
步驟S10、預(yù)先設(shè)置一個(gè)從核使用串口的標(biāo)識(shí),當(dāng)允許從核使用串口時(shí),從核使用串口的標(biāo)識(shí)的值為真;當(dāng)不允許從核使用串口時(shí),從核使用串口的標(biāo)識(shí)的值為假。
具體實(shí)施時(shí),從核UART使用串口的標(biāo)識(shí)記為pollPrintFlag,保存在主從核共享內(nèi)存中,主從核均可以訪問(wèn)。當(dāng)pollPrintFlag為真,即pollPrintFlag=enable時(shí),允許從核使用串口,當(dāng)pollPrintFlag為假,即pollPrintFlag=disable時(shí),不允許從核使用串口。當(dāng)主核啟動(dòng)在控制臺(tái)切到從核后啟動(dòng)一個(gè)檢測(cè)任務(wù),用于從核使用完UART后重新回復(fù)驅(qū)動(dòng)并能收發(fā)字符。
步驟S200、主核處理器和從核處理器啟動(dòng)完成后,主核處理器根據(jù)主核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息。
具體實(shí)施時(shí),其中主核處理器和從核處理器啟動(dòng)完成后,主核處理器檢測(cè)pollPrintFlag的值 ,若當(dāng)pollPrintFlag為真,即pollPrintFlag=enable時(shí),從核使用串口,當(dāng)pollPrintFlag為假,即pollPrintFlag=disable時(shí),不允許從核使用串口,同時(shí)為主核處理器使用串口。主核與串口UART的驅(qū)動(dòng)機(jī)制,采用中斷方式收發(fā)字符。主核設(shè)置串口UART驅(qū)動(dòng),包括關(guān)閉與打開中斷、令發(fā)送函數(shù)是否丟棄字符。
步驟S300、當(dāng)檢測(cè)到從核處理器的驅(qū)動(dòng)串口使能命令時(shí),主核處理器關(guān)閉主核串口驅(qū)動(dòng)。
具體實(shí)施時(shí),如圖4所示,步驟S300具體包括:
步驟S301、當(dāng)從核處理器使用串口時(shí),主核控制從核使用串口的標(biāo)識(shí)的值為真;
步驟S302、當(dāng)從核處理器使用串口時(shí),主核控制從核使用串口的標(biāo)識(shí)的值為真。
具體實(shí)施時(shí),當(dāng)主核使用串口時(shí),想要從主核切換到從核控制臺(tái),則在主核控制臺(tái)執(zhí)行命令,設(shè)置 pollPrintFlag=ENABLE,同時(shí)關(guān)閉主核串口收發(fā)中斷并令發(fā)送函數(shù)每次調(diào)用時(shí)直接返回成功,并不驅(qū)動(dòng)硬件。這樣串口收到的報(bào)文都不會(huì)觸發(fā)主核tty接收任務(wù),tty發(fā)送的消息也直接被丟棄了。TTY包括虛擬控制臺(tái),串口以及偽終端設(shè)備。
步驟S400、從核處理器根據(jù)從核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息。
具體實(shí)施時(shí),從核串口輪詢發(fā)送函數(shù)在判斷pollPrintFlag=ENABLE后,tty下發(fā)的信息可以直接驅(qū)動(dòng)寄存器發(fā)送出去,同理輪詢輸入。
從核與UART的驅(qū)動(dòng)機(jī)制,采用輪詢方式收發(fā)字符,從核設(shè)置UART驅(qū)動(dòng),包括輪詢發(fā)送函數(shù)是否丟棄字符,輪詢接收函數(shù)是否可以從寄存器讀取接收字符。
若從核控制臺(tái)切換到主核時(shí),與上述流程基本逆行。主核在判斷pollPrintFlag=DISABLE后,打開串口收發(fā)中斷,發(fā)送函數(shù)也恢復(fù)正常。從核則恢復(fù)到初始狀態(tài)不能輸出。
以上說(shuō)明舉例是以雙核為基礎(chǔ),本發(fā)明同樣適應(yīng)雙核(4核,8核等等)以上的AMP系統(tǒng)。
在示例性實(shí)施例中,裝置可以被一個(gè)或多個(gè)應(yīng)用專用集成電路(ASIC)、數(shù)字信號(hào)處理器(DSP)、數(shù)字信號(hào)處理設(shè)備(DSPD)、可編程邏輯器件(PLD)、現(xiàn)場(chǎng)可編程門陣列(FPGA)、控制器、微控制器、微處理器或其他電子元件實(shí)現(xiàn),用于執(zhí)行上述方法。
在示例性實(shí)施例中,還提供了一種包括指令的非臨時(shí)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),例如包括指令的存儲(chǔ)器,上述指令可由裝置的處理器執(zhí)行以完成上述方法。例如,所述非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是ROM、隨機(jī)存取存儲(chǔ)器(RAM)、CD-ROM、磁帶、軟盤和光數(shù)據(jù)存儲(chǔ)設(shè)備等。
本發(fā)明還提供了一種非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng)的較佳實(shí)施例的功能原理框圖,如圖5所示,系統(tǒng)包括:
參數(shù)配置模塊100,用于主核處理器和從核處理器分別對(duì)串口的通信參數(shù)進(jìn)行配置,并分別設(shè)置主核處理器的串口驅(qū)動(dòng)方式和從核處理器的串口驅(qū)動(dòng)方式;
第一串口驅(qū)動(dòng)模塊200,用于主核處理器和從核處理器啟動(dòng)完成后,主核處理器根據(jù)主核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息;
檢測(cè)與控制模塊300,用于當(dāng)檢測(cè)到從核處理器的驅(qū)動(dòng)串口使能命令時(shí),主核處理器關(guān)閉主核串口驅(qū)動(dòng);
第二串口驅(qū)動(dòng)模塊,用于從核處理器根據(jù)從核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng),其中,所述參數(shù)配置模塊具體包括:
第一串口參數(shù)配置單元,用于主核處理器對(duì)串口的波特率、奇偶校驗(yàn)位、數(shù)據(jù)位、輸入頻率進(jìn)行配置;具體如方法實(shí)施例所示。
第二串口參數(shù)配置單元,用于從核處理器對(duì)串口的波特率、奇偶校驗(yàn)位、數(shù)據(jù)位、輸入頻率進(jìn)行配置;具體如方法實(shí)施例所示。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng),其中,所述參數(shù)配置模塊還包括:
第一串口驅(qū)動(dòng)方式設(shè)置單元,用于設(shè)置主核處理器的串口驅(qū)動(dòng)方式為中斷收發(fā)包方式,每次收到或發(fā)送一個(gè)字符發(fā)生一次中斷;具體如方法實(shí)施例所示。
第二串口驅(qū)動(dòng)方式設(shè)置單元,用于設(shè)置從核處理器的串口驅(qū)動(dòng)方式為輪詢方式,通過(guò)查詢從核使用串口的標(biāo)識(shí)的值進(jìn)行輸入或輸出字符;具體如方法實(shí)施例所示。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng),其中,所述系統(tǒng)還包括:
預(yù)先設(shè)置模塊,用于預(yù)先設(shè)置一個(gè)從核使用串口的標(biāo)識(shí),當(dāng)允許從核使用串口時(shí),從核使用串口的標(biāo)識(shí)的值為真;當(dāng)不允許從核使用串口時(shí),從核使用串口的標(biāo)識(shí)的值為假;具體如方法實(shí)施例所示。
所述的非對(duì)稱處理系統(tǒng)下多核共用串口的系統(tǒng),其中,所述第一串口驅(qū)動(dòng)模塊具體包括:
第一控制單元,用于當(dāng)從核處理器使用串口時(shí),主核控制從核使用串口的標(biāo)識(shí)的值為真;具體如方法實(shí)施例所示。
第二控制單元,用于當(dāng)檢測(cè)到從核使用串口的標(biāo)識(shí)的值為真時(shí),主核處理器關(guān)閉主核串口驅(qū)動(dòng),不驅(qū)動(dòng)硬件;具體如方法實(shí)施例所示。
綜上所述,本發(fā)明提出了一種非對(duì)稱處理系統(tǒng)下多核共用串口的方法及系統(tǒng),方法包括:主核處理器和從核處理器分別對(duì)串口的通信參數(shù)進(jìn)行配置,并分別設(shè)置主核處理器的串口驅(qū)動(dòng)方式和從核處理器的串口驅(qū)動(dòng)方式;主核處理器和從核處理器啟動(dòng)完成后,主核處理器根據(jù)主核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息;當(dāng)檢測(cè)到從核處理器的驅(qū)動(dòng)串口使能命令時(shí),主核處理器關(guān)閉主核串口驅(qū)動(dòng);從核處理器根據(jù)從核處理器串口驅(qū)動(dòng)方式通過(guò)串口下發(fā)信息。本發(fā)明可以實(shí)現(xiàn)在非對(duì)稱處理系統(tǒng)下,實(shí)現(xiàn)主從核共用一個(gè)串口,主從核的串口驅(qū)動(dòng)互不相干,且不影響系統(tǒng)的穩(wěn)定性,提高了串口的利用效率。
應(yīng)當(dāng)理解的是,本發(fā)明的應(yīng)用不限于上述的舉例,對(duì)本領(lǐng)域普通技術(shù)人員來(lái)說(shuō),可以根據(jù)上述說(shuō)明加以改進(jìn)或變換,所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。