<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式系統的實(shí)時(shí)數據接口擴展

嵌入式系統的實(shí)時(shí)數據接口擴展

作者: 時(shí)間:2011-08-01 來(lái)源:網(wǎng)絡(luò ) 收藏

針對所采用的 CPU 沒(méi)有 MMU,選用了目前在中被廣泛使用的μClinux。μClinux 是從標準的Linux 2.0 內核發(fā)展而來(lái)的,但其源代碼針對典型的應用已經(jīng)作了許多精簡(jiǎn)和修改,使得其內核比標準的 Linux 內核要小很多,不過(guò)它仍然保留了標準 Linux的主要特色。

目前最新的μClinux 版本已經(jīng)支持 S3C4510B 及典型開(kāi)發(fā)板,如果所采用的 CPU 及開(kāi)發(fā)板沒(méi)有被支持,應根據實(shí)際情況移植。此外,由于在外部總線(xiàn)接了 CPLD和 FIFO,為了使應用程序能訪(fǎng)問(wèn)它,需要在μClinux 下開(kāi)發(fā)相應的驅動(dòng)程序。

2

2.1 應用要求

將上述應用于多媒體的網(wǎng)絡(luò )傳輸,如圖2所示。這里的多媒體可以是 MPEG-4或 MPEG-2 等,其流一般是連續、恒定碼率的。

2.2 硬件

根據上述數據流的特點(diǎn),需在嵌入式與外設(編、解碼器)之間加入數據緩沖控制單元。對于發(fā)送端和接收端,數據緩沖控制單元的設計有所不同,下面以MPEG-2 為例說(shuō)明。這里考慮系統的處理能力、網(wǎng)絡(luò )的承受能力以及圖像質(zhì)量,MPEG-2 的輸出為 4Mbps 的CBR(固定比特率)TS流。

2.2.1 發(fā)送端

編碼器送出連續、恒定速率的碼流。如果將此碼流直接送到 CPU 外部總線(xiàn),將會(huì )導致操作系統頻繁地處理中斷,甚至會(huì )產(chǎn)生中斷不能及時(shí)處理從而導致數據丟失。因此,有必要在編碼器與外部總線(xiàn)之間加上 FIFO,同時(shí)用 CPLD 實(shí)現 FIFO 的讀寫(xiě)控制邏輯。編碼器送出的數據流連續不斷地以恒定速率寫(xiě)入FIFO;當FIFO中的數據積聚到一定值后,每寫(xiě)入若干個(gè)數據就向CPU發(fā)一個(gè)中斷;CPU在收到中斷后通過(guò)外部總線(xiàn)讀入相當量的數據,并將其打包送入網(wǎng)絡(luò )。正常情況下,每個(gè)中斷讀數據個(gè)數是一定的,在一段時(shí)間內FIFO寫(xiě)入和讀出將維持平衡,且不會(huì )產(chǎn)生“饑餓”狀態(tài);當操作系統因處理別的任務(wù)而沒(méi)有及時(shí)響應中斷時(shí),FIFO將暫時(shí)進(jìn)入“飽和”狀態(tài),但只要FIFO容量足夠大就不會(huì )產(chǎn)生數據溢出現象。由于CPU從FIFO讀取單位數據的速度大大高于外設向FIFO寫(xiě)單位數據的速度,“飽和”狀態(tài)一般能消除。由此,可以解決前述問(wèn)題。

2.2.2 接收端

在接收端,由于解碼器的輸入要求是一個(gè)連續、恒定速率的碼流,同樣要求在CPU外部總線(xiàn)與編碼器之間加上FIFO和CPLD。同時(shí),接收端的數據包由于經(jīng)過(guò)了網(wǎng)絡(luò ),不可避免地會(huì )引入延時(shí),且數據包之間的延時(shí)是不確定的,甚至會(huì )產(chǎn)生數據包的丟失。這些都需要在接收端予以考慮,增加了接收端數據緩沖控制單元的復雜度。

為了解決數據包到達延時(shí)及抖動(dòng)問(wèn)題(數據包的丟失將間接導致延時(shí)的增加),可以簡(jiǎn)單地靠增大FIFO容量解決。但增大FIFO將意味著(zhù)從編碼器到解碼器之間延時(shí)的增加,影響了實(shí)時(shí)性。因此,為了保證一定的實(shí)時(shí)性,同時(shí)考慮成本因素,不能單純靠增大FIFO解決。

由于FIFO容量的限制,在出現大延時(shí)的情況下,FIFO將可能出現“空”狀態(tài)。這意味著(zhù)送給解碼器的數據流會(huì )有中斷,從而可能導致解碼器的不正常工作并可能不能恢復(在數據流恢復正常后)。為此,需要在FIFO出現“空”狀態(tài)之前,即處于“饑餓”狀態(tài)時(shí)(可以設置一個(gè)閾值),由CPLD停止向FIFO讀數據而向解碼器發(fā)填充包。填充包中含有同步頭,可以維持解碼器的同步。短時(shí)間的插空包會(huì )使視頻圖像出現馬賽克,如果時(shí)間過(guò)長(cháng),可能會(huì )出現黑屏。在實(shí)際試驗中,接收端視頻的質(zhì)量與網(wǎng)絡(luò )的負載情況有關(guān)。當網(wǎng)絡(luò )負載較重時(shí),圖像會(huì )出現馬賽克,黑屏現象一般極少發(fā)生。

2.3 驅動(dòng)程序

為了使μClinux下的應用程序能通過(guò)外部總線(xiàn)訪(fǎng)問(wèn)FIFO,需要編寫(xiě)相應的驅動(dòng)程序。驅動(dòng)程序主要包括三個(gè)基本部分,即CPU相關(guān)寄存器的初始化設置以及CPU對外部I/O口的讀操作和寫(xiě)操作。其中,初始化設置主要包括中斷號及其類(lèi)型設置、外部I/O口數據位寬度和讀寫(xiě)時(shí)序設置等。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>