基于μClinux的 SoPC應(yīng)用系統(tǒng)設(shè)計
完成μClinux內(nèi)核及文件系統(tǒng)的裝載后,即可運行μClinux。鍵入g800000(800000為啟動代碼地址,在SoPC Builder中設(shè)置),μClinux自動完成初始化過程,用戶輸入登錄用戶名nios,密碼μClinux,出現(xiàn)μClinux的提示符#,表示已進(jìn)入μClinux運行環(huán)境。
2.2 轉(zhuǎn)換器應(yīng)用程序的實現(xiàn)
轉(zhuǎn)換器應(yīng)用系統(tǒng)主要完成網(wǎng)絡(luò)接口和串行接口間的數(shù)據(jù)傳輸,所傳輸?shù)臄?shù)據(jù)流如圖4所示。μClinux操作系統(tǒng)中提供了網(wǎng)絡(luò)驅(qū)動程序和串口驅(qū)動程序,并提供了多線程的支持。
轉(zhuǎn)換器應(yīng)用系統(tǒng)中的串口收發(fā)數(shù)據(jù)和網(wǎng)絡(luò)口收發(fā)數(shù)據(jù)是異步進(jìn)行的,可分別作為一個任務(wù)來對待,任務(wù)間是并發(fā)的,因此可采用多線程程序設(shè)計技術(shù)來實現(xiàn)多任務(wù)間的并發(fā)執(zhí)行,系統(tǒng)主程序流程圖如圖5所示。
在 此應(yīng)用系統(tǒng)中有4個任務(wù),分別創(chuàng)建4個線程:網(wǎng)絡(luò)接收線程、網(wǎng)絡(luò)發(fā)送線程、串口接收線程和串口發(fā)送線程。這4個線程可并發(fā)執(zhí)行.因網(wǎng)絡(luò)速度與串口速度存在 著差異,需設(shè)置相應(yīng)的緩沖區(qū)來對收發(fā)數(shù)據(jù)進(jìn)行緩沖。在此應(yīng)用系統(tǒng)中設(shè)置兩個環(huán)形緩沖區(qū),如圖4所示,其中nctrv_uartsd_buf用于接收網(wǎng)絡(luò)數(shù) 據(jù),供存儲從網(wǎng)絡(luò)口接收的數(shù)據(jù),然后串口從此緩沖區(qū)中取出數(shù)據(jù)發(fā)送。另一緩沖區(qū)uartrv_netsd_bur用于接收串口數(shù)據(jù),然后網(wǎng)絡(luò)口取出此緩沖 區(qū)中數(shù)據(jù)發(fā)送出去。
線程間需實現(xiàn)相互通信和同步,共用緩沖區(qū)既要互斥執(zhí)行又要同步執(zhí)行,其操作遵循生產(chǎn)者和消費者模型。線程間的互斥操作采用互斥鎖(mu-tex)來實現(xiàn)。線程間的同步通過設(shè)置兩個指針來實現(xiàn),一個是讀指針,另一個是寫指針,寫指針指向隊頭,初
始化為0,讀指針指向隊尾,初始化為BUFSIZE-1。當(dāng)寫數(shù)據(jù)時,比較讀寫指針是否相等,相同則寫線程阻塞;不相等,則寫入數(shù)據(jù),然后將寫指針加1。當(dāng)讀數(shù)據(jù)時,讀指針加1,然后比較讀寫指針是否相等,相等則讀線程阻塞;不相等,則讀出數(shù)據(jù)。
網(wǎng)絡(luò)發(fā)送線程(流程圖如圖6所示)和串口接收線程(流程圖如圖7所示)間共用環(huán)形緩沖區(qū)uartrv_netsd_buf。串口發(fā)送線程和網(wǎng)絡(luò)接收線程共用環(huán)形緩沖區(qū)netrv_uartsd_buf。兩線程間的關(guān)系和處理類似網(wǎng)絡(luò)發(fā)送線程和串口接收線程。
3 系統(tǒng)測試
完成轉(zhuǎn)換器的軟硬件設(shè)計后,按如圖8所示,連接系統(tǒng)進(jìn)行轉(zhuǎn)換器數(shù)據(jù)的傳輸測試。在PC機A上運行串口收發(fā)程序,而在PC機B上運行以太網(wǎng)收發(fā)程序,經(jīng)測試后數(shù)據(jù)傳輸無誤。
本文引用地址:http://m.butianyuan.cn/article/186028.htm
評論