基于μClinux的 SoPC應用系統設計
完成μClinux內核及文件系統的裝載后,即可運行μClinux。鍵入g800000(800000為啟動(dòng)代碼地址,在SoPC Builder中設置),μClinux自動(dòng)完成初始化過(guò)程,用戶(hù)輸入登錄用戶(hù)名nios,密碼μClinux,出現μClinux的提示符#,表示已進(jìn)入μClinux運行環(huán)境。
2.2 轉換器應用程序的實(shí)現
轉換器應用系統主要完成網(wǎng)絡(luò )接口和串行接口間的數據傳輸,所傳輸的數據流如圖4所示。μClinux操作系統中提供了網(wǎng)絡(luò )驅動(dòng)程序和串口驅動(dòng)程序,并提供了多線(xiàn)程的支持。

轉換器應用系統中的串口收發(fā)數據和網(wǎng)絡(luò )口收發(fā)數據是異步進(jìn)行的,可分別作為一個(gè)任務(wù)來(lái)對待,任務(wù)間是并發(fā)的,因此可采用多線(xiàn)程程序設計技術(shù)來(lái)實(shí)現多任務(wù)間的并發(fā)執行,系統主程序流程圖如圖5所示。

在 此應用系統中有4個(gè)任務(wù),分別創(chuàng )建4個(gè)線(xiàn)程:網(wǎng)絡(luò )接收線(xiàn)程、網(wǎng)絡(luò )發(fā)送線(xiàn)程、串口接收線(xiàn)程和串口發(fā)送線(xiàn)程。這4個(gè)線(xiàn)程可并發(fā)執行.因網(wǎng)絡(luò )速度與串口速度存在 著(zhù)差異,需設置相應的緩沖區來(lái)對收發(fā)數據進(jìn)行緩沖。在此應用系統中設置兩個(gè)環(huán)形緩沖區,如圖4所示,其中nctrv_uartsd_buf用于接收網(wǎng)絡(luò )數 據,供存儲從網(wǎng)絡(luò )口接收的數據,然后串口從此緩沖區中取出數據發(fā)送。另一緩沖區uartrv_netsd_bur用于接收串口數據,然后網(wǎng)絡(luò )口取出此緩沖 區中數據發(fā)送出去。
線(xiàn)程間需實(shí)現相互通信和同步,共用緩沖區既要互斥執行又要同步執行,其操作遵循生產(chǎn)者和消費者模型。線(xiàn)程間的互斥操作采用互斥鎖(mu-tex)來(lái)實(shí)現。線(xiàn)程間的同步通過(guò)設置兩個(gè)指針來(lái)實(shí)現,一個(gè)是讀指針,另一個(gè)是寫(xiě)指針,寫(xiě)指針指向隊頭,初
始化為0,讀指針指向隊尾,初始化為BUFSIZE-1。當寫(xiě)數據時(shí),比較讀寫(xiě)指針是否相等,相同則寫(xiě)線(xiàn)程阻塞;不相等,則寫(xiě)入數據,然后將寫(xiě)指針加1。當讀數據時(shí),讀指針加1,然后比較讀寫(xiě)指針是否相等,相等則讀線(xiàn)程阻塞;不相等,則讀出數據。
網(wǎng)絡(luò )發(fā)送線(xiàn)程(流程圖如圖6所示)和串口接收線(xiàn)程(流程圖如圖7所示)間共用環(huán)形緩沖區uartrv_netsd_buf。串口發(fā)送線(xiàn)程和網(wǎng)絡(luò )接收線(xiàn)程共用環(huán)形緩沖區netrv_uartsd_buf。兩線(xiàn)程間的關(guān)系和處理類(lèi)似網(wǎng)絡(luò )發(fā)送線(xiàn)程和串口接收線(xiàn)程。

3 系統測試
完成轉換器的軟硬件設計后,按如圖8所示,連接系統進(jìn)行轉換器數據的傳輸測試。在PC機A上運行串口收發(fā)程序,而在PC機B上運行以太網(wǎng)收發(fā)程序,經(jīng)測試后數據傳輸無(wú)誤。

評論