新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式軟件中延遲回調(diào)的設(shè)計(jì)和應(yīng)用

嵌入式軟件中延遲回調(diào)的設(shè)計(jì)和應(yīng)用

作者:胡丙龍 時(shí)間:2013-02-27 來(lái)源:電子產(chǎn)品世界 收藏

  引言

本文引用地址:http://2s4d.com/article/142446.htm

  系統(tǒng)通常由處理器外掛多種周邊芯片構(gòu)成,工程師需要花較多的時(shí)間來(lái)設(shè)計(jì)和調(diào)試這些外圍芯片的驅(qū)動(dòng)程序,驅(qū)動(dòng)程序的性能將直接決定系統(tǒng)能否穩(wěn)定運(yùn)行和達(dá)成設(shè)計(jì)目標(biāo)。一般地,處理器廠家會(huì)將目標(biāo)應(yīng)用中用到的外設(shè)驅(qū)動(dòng)打包成板級(jí)支持包(board support package),該提供標(biāo)準(zhǔn)的API給用戶,開(kāi)發(fā)人員只需按指定方式調(diào)用相應(yīng)的函數(shù)獲取服務(wù),從而簡(jiǎn)化系統(tǒng)設(shè)計(jì),而廠家在發(fā)布包前會(huì)做一些測(cè)試來(lái)確保功能和性能。也有例外,工程師有時(shí)不得不定制或重新開(kāi)發(fā)驅(qū)動(dòng)程序,例如: 1)廠家提供的驅(qū)動(dòng)程序是針對(duì)某一操作系統(tǒng)的,而用戶的系統(tǒng)則是經(jīng)過(guò)充分裁剪甚至無(wú)操作系統(tǒng);2)用戶程序框架很成熟,新的驅(qū)動(dòng)程序需要修改以匹配該軟件框架,并只使用現(xiàn)有的系統(tǒng)服務(wù)。

  一個(gè)架構(gòu)良好的軟件,能提供的系統(tǒng)服務(wù)將涵蓋現(xiàn)時(shí)用到的全部功能,并支持有序擴(kuò)充,為嵌入式系統(tǒng)設(shè)計(jì)系統(tǒng)服務(wù)最重要的是框架簡(jiǎn)潔高效。驅(qū)動(dòng)程序則是構(gòu)筑在系統(tǒng)服務(wù)之上,為應(yīng)用程序提供簡(jiǎn)單易用的與外設(shè)通訊的接口,如圖1所示?! ?/p>

 

  在事件驅(qū)動(dòng)的應(yīng)用中,需要用到的系統(tǒng)服務(wù)就包括回調(diào)函數(shù)(callback functions),它被廣泛使用來(lái)簡(jiǎn)化驅(qū)動(dòng)程序的設(shè)計(jì)。以UART驅(qū)動(dòng)程序?yàn)槔? 應(yīng)用程序首先向系統(tǒng)申請(qǐng)DMA服務(wù), 由DMA控制器從內(nèi)存中將一個(gè)100字節(jié)的包順序從UART控制器發(fā)出,發(fā)送過(guò)程可能會(huì)持續(xù)1000ms, 發(fā)送完成才可以執(zhí)行后續(xù)相關(guān)任務(wù)。如果內(nèi)核此時(shí)通過(guò)查詢方式獲取發(fā)送狀態(tài),無(wú)疑將大大地降低系統(tǒng)運(yùn)行效率。更簡(jiǎn)便高效的方式是引入回調(diào)函數(shù)機(jī)制,在初始化時(shí)提供回調(diào)函數(shù),請(qǐng)求的任務(wù)完成時(shí)該回調(diào)函數(shù)將被自動(dòng)調(diào)用。

  事件的處理過(guò)程一般和硬件中斷關(guān)聯(lián)在一起。高優(yōu)先級(jí)的處理任務(wù)需要直接放在中斷服務(wù)程序中執(zhí)行,對(duì)于實(shí)時(shí)性要求很高的應(yīng)用,中斷服務(wù)程序中應(yīng)盡可能短小。而大量的、長(zhǎng)時(shí)間的處理則可以放入回調(diào)函數(shù)中,以較低優(yōu)先級(jí)(通常是軟件中斷級(jí))運(yùn)行,并隨時(shí)可以被高優(yōu)先級(jí)的其它硬件中斷搶占。這樣的機(jī)制要求對(duì)所有的回調(diào)函數(shù)統(tǒng)一管理和分派,有些可能還要求能設(shè)置回調(diào)函數(shù)的優(yōu)先級(jí)。此時(shí),回調(diào)函數(shù)并不是在請(qǐng)求的事件發(fā)生時(shí)馬上被執(zhí)行,而是延遲至合理的被調(diào)度時(shí)刻運(yùn)行。這稱(chēng)為延遲回調(diào)(DCB, deferred callback)。

  以高性能Blackfin和SHARC處理器平臺(tái)為例,ADI公司提供了完備的系統(tǒng)服務(wù)和驅(qū)動(dòng)包(System Service & Device Driver),它能夠獨(dú)立運(yùn)行,也可與操作系統(tǒng)協(xié)同工作,其中就包括高效率的延遲回調(diào)服務(wù),用戶編寫(xiě)驅(qū)動(dòng)程序的工作被大大簡(jiǎn)化。不過(guò),一些高實(shí)時(shí)系統(tǒng)比如電機(jī)驅(qū)動(dòng)器無(wú)需操作系統(tǒng),類(lèi)似的框架在實(shí)際應(yīng)用中仍顯復(fù)雜。這里介紹的方法以最簡(jiǎn)潔的方式實(shí)現(xiàn)延遲回調(diào)服務(wù),可單獨(dú)封裝成模塊,應(yīng)用于任何處理器。

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


關(guān)鍵詞: 嵌入式 BSP

評(píng)論


相關(guān)推薦

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

關(guān)閉