基于soc的嵌入式系統解析方案
在此應用系統中有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)程。
評論