基于soc的嵌入式系統(tǒng)解析方案
在此應(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ù)進行緩沖。在此應(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ā)送線程和串口接收線程。
評論