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