專利名稱:一種實(shí)現(xiàn)多任務(wù)管理輸入輸出資源的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子產(chǎn)品的操作系統(tǒng)管理硬件資源的方法,尤其涉及實(shí)現(xiàn)多任務(wù)系統(tǒng)管理通用輸入/輸出(GPIO,General Purpose Input Output)接口資源的方法、系統(tǒng)及裝置。
背景技術(shù):
目前基于多任務(wù)操作系統(tǒng)開發(fā)的電子產(chǎn)品中可開放使用的GPIO資源越來越多, 且產(chǎn)品中可通過這些GPIO資源進(jìn)行控制或檢測的對象也越來越豐富。以往的電子產(chǎn)品中采用傳統(tǒng)的方式直接操作GPIO資源,會帶來大量離散的代碼, 且其操作也是極受產(chǎn)品功能約束的;并且,不同程序員的編程習(xí)慣和技術(shù)水平也各有不同; 諸如此類因素會帶來一些問題,例如一個(gè)底層對GPIO資源的更改,可能會導(dǎo)致上層所有針對它的應(yīng)用也要隨著改動;一個(gè)GPIO資源的刪除可能會導(dǎo)致相應(yīng)的非法地址操作;多個(gè)程序并發(fā)地操作同一個(gè)GPIO資源,可能會造成系統(tǒng)的I/O接口資源沖突等。目前的產(chǎn)品,尤其是嵌入式的終端產(chǎn)品都極力倡導(dǎo)模塊化地快速開發(fā),顯然那些需依賴具體產(chǎn)品功能的程序模塊是無法滿足跨產(chǎn)品的快速移植和開發(fā)的需要的。結(jié)合以上情況,就極具產(chǎn)品特色的GPIO資源來說,非常有必要提出一種能夠屏蔽具體的產(chǎn)品功能的統(tǒng)一而有效的管理方法,從而妥善地解決上述問題。在電子產(chǎn)品技術(shù)的發(fā)展進(jìn)程中,也能見到一些產(chǎn)品,會在具硬件資源的物理層和使用該硬件資源的應(yīng)用層之間增加一個(gè)中間層(或稱隔離層),通過該中間層實(shí)現(xiàn)應(yīng)用層對物理層硬件資源的操作,也即避免應(yīng)用層中各應(yīng)用程序直接操作物理層硬件資源而導(dǎo)致硬件資源的沖突甚至系統(tǒng)的崩潰等。但是,這只是利用中間層來實(shí)現(xiàn)應(yīng)用層與物理層硬件資源隔離的技術(shù)方案,目前尚無見有利用中間層來實(shí)現(xiàn)對物理層硬件資源統(tǒng)一管理的技術(shù)方案。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種實(shí)現(xiàn)多任務(wù)管理輸入輸出資源的方法及系統(tǒng),能夠隔離具體的產(chǎn)品功能而統(tǒng)一有效地管理I/O接口資源。為了解決上述技術(shù)問題,本發(fā)明提供了一種實(shí)現(xiàn)多任務(wù)管理輸入輸出資源的方法,除了涉及應(yīng)用層和資源驅(qū)動層外,還涉及預(yù)先加載的隔離層,該方法包括隔離層在初始化時(shí),初始化處理用于管理所述輸入輸出資源的資源池和資源配置庫,根據(jù)資源驅(qū)動層的資源注冊請求將要管理的資源注冊到資源池中;應(yīng)用層根據(jù)通過所述隔離層從資源池探測獲取的輸入輸出資源向隔離層下發(fā)資源配置請求;隔離層根據(jù)所述資源配置請求將相應(yīng)的輸入輸出資源配置到資源配置庫中。進(jìn)一步地,隔離層在所述初始化時(shí)還包括啟動定期掃描配置在資源配置庫中的輸入輸出資源。
進(jìn)一步地,資源池是一個(gè)能夠動態(tài)更改的鏈表數(shù)據(jù)結(jié)構(gòu),該鏈表中的每一節(jié)點(diǎn)用于記錄每一輸入輸出的資源屬性信息和指向前后輸入輸出資源節(jié)點(diǎn)的指針,資源屬性信息包括資源的名稱、物理地址、輸入輸出方向以及有效電平中的一種或多種。進(jìn)一步地,資源屬性信息還包括針對特定的資源指定需要執(zhí)行的函數(shù),包括指定以下函數(shù)中的一個(gè)或多個(gè)初始化函數(shù),用于對特定的資源在初始化時(shí)執(zhí)行操作;寫狀態(tài)函數(shù),用于對特定的資源在寫狀態(tài)時(shí)執(zhí)行多個(gè)寫動作序列;讀狀態(tài)函數(shù),用于對特定的資源在讀狀態(tài)時(shí)執(zhí)行多個(gè)讀動作序列。進(jìn)一步地,資源配置庫包括輸入資源配置庫和輸出資源配置庫,輸入資源配置庫和輸出資源配置庫均是一個(gè)能夠動態(tài)更改的二維鏈表數(shù)據(jù)結(jié)構(gòu),包括主節(jié)點(diǎn)和子節(jié)點(diǎn),主節(jié)點(diǎn)包含一鏈表節(jié)點(diǎn)和一個(gè)子鏈表頭;其中主節(jié)點(diǎn),對于輸出資源配置庫是一個(gè)用來區(qū)分動作集的動作標(biāo)識碼;對于輸入資源配置庫是一個(gè)輸入資源的物理地址;鏈表節(jié)點(diǎn),用來指向與本主節(jié)點(diǎn)相鄰的前后主節(jié)點(diǎn);子鏈表頭,作為輸出資源配置庫用于指向主節(jié)點(diǎn)下動作集子鏈表的起始子節(jié)點(diǎn)和結(jié)束子節(jié)點(diǎn);作為輸入資源配置庫用于指向主節(jié)點(diǎn)下事件集子鏈表的起始子節(jié)點(diǎn)和結(jié)束子節(jié)點(diǎn)。子節(jié)點(diǎn)包含子鏈表節(jié)點(diǎn),用于指向與本子節(jié)點(diǎn)相鄰的前后子節(jié)點(diǎn)。進(jìn)一步地,隔離層初始化處理用于管理輸入輸出資源的資源池和資源配置庫,根據(jù)資源驅(qū)動層的資源注冊請求將要管理的資源注冊到資源池中,具體包括清空資源池及輸入資源配置庫、輸出資源配置庫,創(chuàng)建與應(yīng)用層和資源驅(qū)動層的鏈接通道;使能鏈接通道,通過資源注冊接口將資源驅(qū)動層請求注冊的資源及其屬性注冊到資源池。進(jìn)一步地,應(yīng)用層根據(jù)從隔離層的資源池請求獲取的接口資源向隔離層下發(fā)資源配置請求,具體包括應(yīng)用層通過資源探索接口向隔離層發(fā)出資源探索請求,在資源探索接口中傳遞要探索的輸入輸出資源的名稱信息;隔離層依據(jù)所述名稱信息從資源池查獲到相應(yīng)的輸入輸出資源的物理地址,通過資源探索接口返回給應(yīng)用層;應(yīng)用層根據(jù)物理地址向隔離層請求一空閑的動作標(biāo)識,用動作標(biāo)識向隔離層請求配置輸出資源配置庫的主節(jié)點(diǎn),并通過資源配置接口下發(fā)資源配置請求及其動作配置屬性;或者,以物理地址為標(biāo)識向隔離層請求配置輸入資源配置庫的主節(jié)點(diǎn),并通過資源配置接口下發(fā)資源配置請求及其事件配置屬性。進(jìn)一步地,應(yīng)用層下發(fā)的所述動作配置屬性包括動作集動作數(shù)目和動作模式,動作模式包括 “置有效”、“置無效”、“延時(shí)置有效”、“延時(shí)置無效”和“閃爍”中的一種或多種;應(yīng)用層下發(fā)的事件配置屬性包括輸入狀態(tài)和事件上報(bào)方式,輸入狀態(tài)用于表示事件觸發(fā)的邏輯狀態(tài),包括“持續(xù)無效”、“持續(xù)有效”、“變化”、“無效變有效”以及“有效變無效”中的一種或多種;事件上報(bào)方式用于指明事件觸發(fā)時(shí)上報(bào)應(yīng)用層的方式,包括主動上報(bào)和被動上報(bào)中的任意一種。進(jìn)一步地,應(yīng)用層下發(fā)的動作配置屬性還包括擴(kuò)展參數(shù)和動作集重復(fù)次數(shù)中的一種或多種, 其中包括當(dāng)動作模式為“延時(shí)置有效”或“延時(shí)置無效”時(shí)的延時(shí)時(shí)間擴(kuò)展參數(shù),當(dāng)所述動作模式為所述“閃爍”時(shí)的周期、占空比和閃爍次數(shù)三個(gè)擴(kuò)展參數(shù);應(yīng)用層下發(fā)的所述事件配置屬性還包括保持時(shí)間、主動上報(bào)方式、主動上報(bào)參數(shù)以及消息體中的一種或多種;其中,保持時(shí)間表示邏輯狀態(tài)為“持續(xù)無效”或“持續(xù)有效”時(shí)的持續(xù)時(shí)間;主動上報(bào)方式表示事件觸發(fā)后主動上報(bào)給應(yīng)用層的方式,包括直接函數(shù)調(diào)用或鏈接通道方式;主動上報(bào)參數(shù)指定主動上報(bào)方式下上報(bào)的參數(shù);消息體用于對主動上報(bào)方式下上報(bào)的事件進(jìn)行分類,使應(yīng)用層更詳細(xì)地知悉上報(bào)的事件。進(jìn)一步地,隔離層根據(jù)資源配置請求將相應(yīng)的輸入輸出資源配置到資源配置庫中,具體包括隔離層檢查資源配置接口傳遞的資源配置屬性;若判斷配置的是輸入輸出資源的主節(jié)點(diǎn),則在確認(rèn)要配置的資源無沖突后,分配一主節(jié)點(diǎn),將資源配置屬性作為該主節(jié)點(diǎn)配置填充,初始化鏈表節(jié)點(diǎn)和子鏈表頭;然后打開寫保護(hù)鎖,將配置的主節(jié)點(diǎn)加入輸入資源配置庫或輸出資源配置庫的鏈表尾端,釋放寫保護(hù)鎖;或者,若判斷配置的不是主節(jié)點(diǎn),則依據(jù)資源配置屬性中的物理地址在輸入資源配置庫中或依據(jù)動作標(biāo)識在輸出資源配置庫中查找相應(yīng)的主節(jié)點(diǎn),并在查獲的主節(jié)點(diǎn)下檢查配置的資源無沖突;分配子節(jié)點(diǎn),將事件配置屬性或動作配置屬性作為子節(jié)點(diǎn)配置填充, 初始化子鏈表節(jié)點(diǎn);打開寫保護(hù)鎖,將配置的子節(jié)點(diǎn)加入主節(jié)點(diǎn)下相應(yīng)的子鏈表尾端,釋放寫保護(hù)鎖。進(jìn)一步地,隔離層啟動的定期掃描,具體包括根據(jù)從輸入資源配置庫中獲取的事件配置屬性,定期掃描輸入資源配置庫中配置的每一主節(jié)點(diǎn)下的每一子節(jié)點(diǎn),通過與資源驅(qū)動層之間的資源操作接口讀取相應(yīng)輸入端口的輸入狀態(tài),若根據(jù)事件配置屬性確定輸入狀態(tài)為事件觸發(fā)狀態(tài),則按事件配置屬性規(guī)定的事件上報(bào)模式上報(bào)輸入端口觸發(fā)的事件;或者,根據(jù)從輸出資源配置庫中獲取的動作配置屬性,定期掃描輸出資源配置庫中配置的每一主節(jié)點(diǎn)下的每一子節(jié)點(diǎn),根據(jù)動作配置屬性確定該子節(jié)點(diǎn)的動作可執(zhí)行,則依據(jù)對應(yīng)的輸出資源當(dāng)前應(yīng)輸出的邏輯狀態(tài)并結(jié)合動作配置屬性中定義的有效電平計(jì)算實(shí)際輸出電平,然后通過與資源驅(qū)動層之間的資源操作接口來改變相應(yīng)輸出端口的輸出狀態(tài)。為了解決上述技術(shù)問題,本發(fā)明提供了一種實(shí)現(xiàn)多任務(wù)管理輸入輸出資源的系統(tǒng),除了包括應(yīng)用層模塊和資源驅(qū)動層模塊外,還包括預(yù)先加載的隔離層模塊;其中
資源驅(qū)動層模塊,用于記錄物理層中輸入輸出資源及其屬性,通過資源注冊接口向隔離層發(fā)出資源注冊請求;隔離層模塊,用于在初始化時(shí)根據(jù)資源注冊請求將要管理的輸入輸出資源及其屬性注冊到一資源池中;根據(jù)應(yīng)用層模塊的請求從資源池查獲輸入輸出資源,并返回給應(yīng)用層模塊;將應(yīng)用層模塊所需的輸入輸出資源配置到資源配置庫中;應(yīng)用層模塊,用于將通過隔離層模塊從資源池探測獲取的輸入輸出資源及其配置屬性向隔離層模塊下發(fā)資源配置請求。進(jìn)一步地,隔離層模塊在初始化時(shí)還啟動定期掃描配置在資源配置庫中的輸入輸出資源。進(jìn)一步地,資源池是一個(gè)能夠動態(tài)更改的鏈表數(shù)據(jù)結(jié)構(gòu),該鏈表中的每一節(jié)點(diǎn)用于記錄每一輸入輸出的資源屬性信息和指向相鄰的前后輸入輸出資源節(jié)點(diǎn)的指針,資源屬性信息包括資源的名稱、物理地址、輸入輸出方向以及有效電平中的一種或多種。進(jìn)一步地,資源配置庫包括輸入資源配置庫和輸出資源配置庫,輸入資源配置庫和輸出資源配置庫均是一個(gè)能夠動態(tài)更改的二維鏈表數(shù)據(jù)結(jié)構(gòu),包括主節(jié)點(diǎn)和子節(jié)點(diǎn),主節(jié)點(diǎn)包含一鏈表節(jié)點(diǎn)和一個(gè)子鏈表頭;其中主節(jié)點(diǎn),對于輸出資源配置庫是一個(gè)用來區(qū)分動作集的動作標(biāo)識碼;對于輸入資源配置庫是一個(gè)輸入資源的物理地址;鏈表節(jié)點(diǎn),用來指向與本主節(jié)點(diǎn)相鄰的前后主節(jié)點(diǎn);子鏈表頭,作為輸出資源配置庫用于指向主節(jié)點(diǎn)下動作集子鏈表的起始子節(jié)點(diǎn)和結(jié)束子節(jié)點(diǎn);作為輸入資源配置庫用于指向主節(jié)點(diǎn)下事件集子鏈表的起始子節(jié)點(diǎn)和結(jié)束子節(jié)占.
I— /、、、 子節(jié)點(diǎn)包含子鏈表節(jié)點(diǎn),用于指向與本子節(jié)點(diǎn)相鄰的前后子節(jié)點(diǎn)。進(jìn)一步地,隔離層模塊進(jìn)一步包括依次相連的如下模塊管理初始化模塊,用于在初始化時(shí)清空資源池、輸入資源配置庫和輸出資源配置庫,根據(jù)資源注冊請求將資源注冊到所述資源池中;根據(jù)應(yīng)用層模塊的資源探測請求將查獲的資源返回給應(yīng)用層模塊;資源配置模塊,用于根據(jù)資源配置請求,將應(yīng)用層模塊下發(fā)的輸出資源及其動作配置屬性配置到輸出資源配置庫中,或?qū)?yīng)用層模塊下發(fā)的輸入資源及其事件配置屬性配置到輸入資源配置庫中;資源操作模塊,用于根據(jù)從輸入資源配置庫中獲取的事件配置屬性,掃描輸入資源配置庫中配置的每一主節(jié)點(diǎn)下的子節(jié)點(diǎn),通過與資源驅(qū)動層模塊的資源操作接口讀取輸入端口的輸入狀態(tài),將確定為事件觸發(fā)狀態(tài)上報(bào)給應(yīng)用層模塊;或者,根據(jù)從輸出資源配置庫中獲取的動作配置屬性,定期掃描輸出資源配置庫中配置的每一主節(jié)點(diǎn)下的子節(jié)點(diǎn);依據(jù)輸出資源當(dāng)前應(yīng)輸出的邏輯狀態(tài)并結(jié)合有效電平計(jì)算實(shí)際輸出電平,通過資源操作接口來改變相應(yīng)輸出端口的輸出狀態(tài)。本發(fā)明利用在與產(chǎn)品相關(guān)的GPIO資源驅(qū)動層和使用GPIO資源的應(yīng)用層之間增加的一個(gè)隔離層,將應(yīng)用層對GPIO資源的所有操作轉(zhuǎn)化成抽象化的邏輯操作,并根據(jù)對GPIO 資源池中的GPIO資源數(shù)據(jù)的操作結(jié)果將該邏輯操作轉(zhuǎn)化為驅(qū)動層對物理層中GPIO資源具
9體的實(shí)際操作,能夠集中、統(tǒng)一地管理GPIO資源,避免因底層對GPIO資源的更改而使上層所有針對其應(yīng)用也隨之改動;并且避免因刪除GPIO資源導(dǎo)致的非法地址操作,同時(shí)還可避免多個(gè)應(yīng)用程序并發(fā)地操作同一個(gè)GPIO資源造成的資源沖突等,從而極大程度地滿足跨產(chǎn)品的快速移植和開發(fā)的發(fā)展需要。
圖1是本發(fā)明的實(shí)現(xiàn)多任務(wù)管理GPIO資源的系統(tǒng)實(shí)施例的結(jié)構(gòu)示意示意圖;圖2是本發(fā)明的GPIO資源池的雙向鏈表結(jié)構(gòu)示意圖;圖3是本發(fā)明的GPIO資源配置的二維雙向鏈表結(jié)構(gòu)示意圖;圖4是本發(fā)明的隔離層進(jìn)行初始化流程圖;圖5是本發(fā)明的隔離層與BSP層交互注冊GPIO資源的流程圖;圖6是本發(fā)明的隔離層進(jìn)行GPIO資源配置的流程圖;圖7是隔離層掃描輸出資源的流程圖;圖8是隔離層掃描輸入資源的流程圖;圖9是本發(fā)明的GPIO資源管理方法實(shí)施例對輸出資源的應(yīng)用實(shí)例;圖10本發(fā)明的GPIO資源管理方法實(shí)施例對鍵輸入的應(yīng)用實(shí)例。
具體實(shí)施例方式以下結(jié)合附圖和優(yōu)選實(shí)施例對本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)地闡述。以下例舉的實(shí)施例僅用于說明和解釋本發(fā)明,而不構(gòu)成對本發(fā)明技術(shù)方案的限制。如圖1所示,表示了本發(fā)明的實(shí)現(xiàn)多任務(wù)管理GPIO資源的系統(tǒng)實(shí)施例的結(jié)構(gòu),包括邏輯層中依次連接的應(yīng)用層模塊、隔離層模塊及BSP層模塊(即GPIO資源驅(qū)動層,Board Support Package板級支持包),其中BSP層模塊,用于記錄物理層中GPIO資源及其屬性,通過資源注冊接口向隔離層發(fā)出資源注冊請求;隔離層模塊,用于根據(jù)BSP層模塊的資源注冊請求將GPIO資源及其屬性注冊到資源池中;根據(jù)應(yīng)用層模塊的請求將從資源池查詢的GPIO資源返回給應(yīng)用層模塊,和/或?qū)?yīng)用層模塊所需的GPIO資源配置到資源配置庫中;應(yīng)用層模塊,用于與隔離層模塊交互,將從資源池探測獲取的GPIO資源及其配置屬性向隔離層模塊下發(fā)資源配置請求。資源池和資源配置庫之間是通過資源的物理地址聯(lián)系的。隔離層模塊根據(jù)應(yīng)用層模塊的資源配置請求,將GPIO資源的物理地址和資源的配置屬性寫入資源配置庫。隔離層模塊根據(jù)資源屬性和資源配置屬性,請求BSP層模塊掃描GPIO資源,更新相應(yīng)的輸出資源的動作狀態(tài),或向應(yīng)用層上報(bào)相應(yīng)的輸入資源觸發(fā)的事件;BSP層模塊根據(jù)隔離層模塊的請求,對物理層相應(yīng)的輸出或輸入端口進(jìn)行操作。隔離層模塊通過掃描資源配置庫中的主節(jié)點(diǎn)找到相應(yīng)資源的物理地址,根據(jù)該物理地址從資源池中查獲相應(yīng)的GPIO資源屬性,并根據(jù)資源配置庫中記錄的資源配置屬性, 通過BSP層模塊提供的資源操作接口請求BSP層模塊掃描GPIO資源。上述隔離層模塊的存在,使得與產(chǎn)品密切相關(guān)的BSP層模塊和使用GPIO資源的應(yīng)用層模塊中的軟件二者之間形成了一個(gè)隔離層,故二者不再被捆綁在一起,甚至BSP層模塊可注冊一些虛擬的GPIO資源來實(shí)現(xiàn)產(chǎn)品開發(fā)程序的仿真。本發(fā)明為隔離層提供了一個(gè)與應(yīng)用層交互的統(tǒng)一接口,用該接口解析入?yún)⒅械拿铑愋?,然后根?jù)命令類型來解析對應(yīng)的下行數(shù)據(jù);根據(jù)命令類型和下行數(shù)據(jù)執(zhí)行應(yīng)用層請求的操作,最后將操作的結(jié)果和需要反饋的數(shù)據(jù)封裝成統(tǒng)一的結(jié)構(gòu)反饋到應(yīng)用層。本發(fā)明利用在邏輯層中與具體產(chǎn)品相關(guān)的BSP層模塊與使用GPIO資源的應(yīng)用層模塊(包括用戶態(tài)應(yīng)用程序和內(nèi)核態(tài)程序)之間建立的隔離層模塊,屏蔽應(yīng)用層模塊使用 GPIO資源的產(chǎn)品特殊性,將應(yīng)用層模塊對GPIO資源的所有操作都轉(zhuǎn)化成抽象化的邏輯操作,根據(jù)對資源池中資源數(shù)據(jù)的操作對GPIO資源進(jìn)行管理,并獲取對GPIO資源統(tǒng)一的實(shí)際操作,通過BSP層模塊提供的資源操作接口實(shí)現(xiàn)對物理層GPIO端口的硬件操作。圖1所示的隔離層模塊包括依次連接管理初始化模塊、資源配置模塊以及資源操作模塊,其中管理初始化模塊,用于初始化處理管理GPIO資源的資源池和資源配置庫,根據(jù) BSP層模塊的資源注冊請求將需要管理的GPIO資源注冊到該資源池中;根據(jù)應(yīng)用層模塊的資源探測請求將查獲的GPIO資源返回給應(yīng)用層模塊;資源配置模塊,用于根據(jù)應(yīng)用層模塊的配置請求,將應(yīng)用層模塊下發(fā)的GPIO資源配置屬性配置到資源配置庫中;資源操作模塊,用于根據(jù)從資源配置庫中獲取的資源配置屬性,通過與BSP層模塊的資源操作接口定期掃描資源配置庫中GPIO資源配置屬性,更新輸出資源的動作狀態(tài), 或上報(bào)輸入資源觸發(fā)的事件。管理初始化模塊構(gòu)建的資源池是一個(gè)可動態(tài)更改的鏈表數(shù)據(jù)結(jié)構(gòu),如圖2所示, 其中每一節(jié)點(diǎn)記錄每一 GPIO資源的名稱、物理地址和其它屬性信息以及指向與本節(jié)點(diǎn)相鄰的前后GPIO資源節(jié)點(diǎn)的指針(指向前一資源節(jié)點(diǎn)的指針為“Prev”,指向后一資源節(jié)點(diǎn)的指針為“Next”)。當(dāng)然,本發(fā)明對資源池除了上述鏈表數(shù)據(jù)結(jié)構(gòu)外,也可以采用樹狀數(shù)據(jù)結(jié)構(gòu)或其它圖示數(shù)據(jù)結(jié)構(gòu)的形式構(gòu)成。只是前者對于本發(fā)明來說結(jié)構(gòu)更簡潔且足以實(shí)現(xiàn)對GPIO資源的記載功能,因而它是優(yōu)選的數(shù)據(jù)結(jié)構(gòu)。BSP層在GPIO資源屬性描述表中表述和記錄了 GPIO資源;通過執(zhí)行一資源注冊請求接口函數(shù)請求注冊GPIO資源,該接口函數(shù)傳遞了 GPIO資源屬性信息,如表1中所示。表 權(quán)利要求
1.一種實(shí)現(xiàn)多任務(wù)管理輸入輸出資源的方法,涉及應(yīng)用層和資源驅(qū)動層,其特征在于, 還涉及預(yù)先加載的隔離層,該方法包括所述隔離層在初始化時(shí),初始化處理用于管理所述輸入輸出資源的資源池和資源配置庫,根據(jù)所述資源驅(qū)動層的資源注冊請求將要管理的所述資源注冊到所述資源池中;所述應(yīng)用層根據(jù)通過所述隔離層從所述資源池探測獲取的輸入輸出資源向所述隔離層下發(fā)資源配置請求;所述隔離層根據(jù)所述資源配置請求將相應(yīng)的輸入輸出資源配置到所述資源配置庫中。
2.按照權(quán)利要求1所述的方法,其特征在于,所述隔離層在所述初始化時(shí)還包括啟動定期掃描配置在所述資源配置庫中的所述輸入輸出資源。
3.按照權(quán)利要求1或2所述的方法,其特征在于,所述資源池是一個(gè)能夠動態(tài)更改的鏈表數(shù)據(jù)結(jié)構(gòu),該鏈表中的每一節(jié)點(diǎn)用于記錄每一輸入輸出的資源屬性信息和指向相鄰的前后輸入輸出資源節(jié)點(diǎn)的指針,所述資源屬性信息包括資源的名稱、物理地址、輸入輸出方向以及有效電平中的一種或多種。
4.按照權(quán)利要求3所述的方法,其特征在于,所述資源屬性信息還包括針對特定的資源指定需要執(zhí)行的函數(shù),包括指定以下函數(shù)中的一個(gè)或多個(gè)初始化函數(shù),用于對所述特定的資源在所述初始化時(shí)執(zhí)行操作;寫狀態(tài)函數(shù),用于對所述特定的資源在寫狀態(tài)時(shí)執(zhí)行多個(gè)寫動作序列;讀狀態(tài)函數(shù),用于對所述特定的資源在讀狀態(tài)時(shí)執(zhí)行多個(gè)讀動作序列。
5.按照權(quán)利要求3或4所述的方法,其特征在于,所述資源配置庫包括輸入資源配置庫和輸出資源配置庫,所述輸入資源配置庫和輸出資源配置庫均是一個(gè)能夠動態(tài)更改的二維鏈表數(shù)據(jù)結(jié)構(gòu),包括主節(jié)點(diǎn)和子節(jié)點(diǎn),所述主節(jié)點(diǎn)包含一鏈表節(jié)點(diǎn)和一個(gè)子鏈表頭;其中所述主節(jié)點(diǎn),對于輸出資源配置庫是一個(gè)用來區(qū)分動作集的動作標(biāo)識碼;對于輸入資源配置庫是一個(gè)輸入資源的物理地址;所述鏈表節(jié)點(diǎn),用來指向與本主節(jié)點(diǎn)相鄰的前后主節(jié)點(diǎn);所述子鏈表頭,作為輸出資源配置庫用于指向主節(jié)點(diǎn)下動作集子鏈表的起始子節(jié)點(diǎn)和結(jié)束子節(jié)點(diǎn);作為輸入資源配置庫用于指向主節(jié)點(diǎn)下事件集子鏈表的起始子節(jié)點(diǎn)和結(jié)束子節(jié)占.I— /、、、 所述子節(jié)點(diǎn)包含子鏈表節(jié)點(diǎn),用于指向與本子節(jié)點(diǎn)相鄰的前后子節(jié)點(diǎn)。
6.按照權(quán)利要求5所述的方法,其特征在于,所述隔離層初始化處理用于管理所述輸入輸出資源的資源池和資源配置庫,根據(jù)所述資源驅(qū)動層的資源注冊請求將要管理的所述資源注冊到資源池中,具體包括清空所述資源池及所述輸入資源配置庫、所述輸出資源配置庫,創(chuàng)建與所述應(yīng)用層和資源驅(qū)動層的鏈接通道;使能所述鏈接通道,通過資源注冊接口將所述資源驅(qū)動層請求注冊的所述資源及其屬性注冊到所述資源池。
7.按照權(quán)利要求5所述的方法,其特征在于,所述應(yīng)用層根據(jù)從隔離層的資源池請求獲取的接口資源向所述隔離層下發(fā)資源配置請求,具體包括所述應(yīng)用層通過資源探索接口向所述隔離層發(fā)出資源探索請求,在所述資源探索接口中傳遞要探索的輸入輸出資源的名稱信息;所述隔離層依據(jù)所述名稱信息從所述資源池查獲到相應(yīng)的輸入輸出資源的物理地址, 通過資源探索接口返回給所述應(yīng)用層;所述應(yīng)用層根據(jù)所述物理地址向所述隔離層請求一空閑的動作標(biāo)識,用所述動作標(biāo)識向所述隔離層請求配置輸出資源配置庫的主節(jié)點(diǎn),并通過資源配置接口下發(fā)所述資源配置請求及其動作配置屬性;或者,以所述物理地址為標(biāo)識向所述隔離層請求配置輸入資源配置庫的主節(jié)點(diǎn),并通過資源配置接口下發(fā)所述資源配置請求及其事件配置屬性。
8.按照權(quán)利要求7所述的方法,其特征在于,所述應(yīng)用層下發(fā)的所述動作配置屬性包括動作集動作數(shù)目和動作模式,所述動作模式包括“置有效”、“置無效”、“延時(shí)置有效”、“延時(shí)置無效”和“閃爍”中的一種或多種;應(yīng)用層下發(fā)的所述事件配置屬性包括輸入狀態(tài)和事件上報(bào)方式,輸入狀態(tài)用于表示事件觸發(fā)的邏輯狀態(tài),包括“持續(xù)無效”、“持續(xù)有效”、“變化”、“無效變有效”以及“有效變無效”中的一種或多種;事件上報(bào)方式用于指明事件觸發(fā)時(shí)上報(bào)應(yīng)用層的方式,包括主動上報(bào)和被動上報(bào)中的任意一種。
9.按照權(quán)利要求8所述的方法,其特征在于,應(yīng)用層下發(fā)的所述動作配置屬性還包括擴(kuò)展參數(shù)和動作集重復(fù)次數(shù)中的一種或多種, 其中包括當(dāng)所述動作模式為“延時(shí)置有效”或“延時(shí)置無效”時(shí)的延時(shí)時(shí)間擴(kuò)展參數(shù),當(dāng)動作模式為“閃爍”時(shí)的周期、占空比和閃爍次數(shù)三個(gè)擴(kuò)展參數(shù);應(yīng)用層下發(fā)的所述事件配置屬性還包括保持時(shí)間、主動上報(bào)方式、主動上報(bào)參數(shù)以及消息體中的一種或多種;其中,所述保持時(shí)間表示所述邏輯狀態(tài)為所述“持續(xù)無效”或“持續(xù)有效”時(shí)的持續(xù)時(shí)間; 所述主動上報(bào)方式表示事件觸發(fā)后主動上報(bào)給所述應(yīng)用層的方式,包括直接函數(shù)調(diào)用或鏈接通道方式;所述主動上報(bào)參數(shù)指定主動上報(bào)方式下上報(bào)的參數(shù);所述消息體用于對主動上報(bào)方式下上報(bào)的事件進(jìn)行分類,使所述應(yīng)用層更詳細(xì)地知悉所述上報(bào)的事件。
10.按照權(quán)利要求8或9所述的方法,其特征在于,所述隔離層根據(jù)所述資源配置請求將相應(yīng)的輸入輸出資源配置到資源配置庫中,具體包括所述隔離層檢查所述資源配置接口傳遞的資源配置屬性;若判斷配置的是所述輸入輸出資源的主節(jié)點(diǎn),則在確認(rèn)要配置的資源無沖突后,分配一主節(jié)點(diǎn),將所述資源配置屬性作為該主節(jié)點(diǎn)配置填充,初始化所述鏈表節(jié)點(diǎn)和所述子鏈表頭;然后打開寫保護(hù)鎖,將配置的主節(jié)點(diǎn)加入輸入資源配置庫或輸出資源配置庫的鏈表尾端,釋放所述寫保護(hù)鎖;或者,若判斷配置的不是所述主節(jié)點(diǎn),則依據(jù)所述資源配置屬性中的所述物理地址在所述輸入資源配置庫中或依據(jù)所述動作標(biāo)識在所述輸出資源配置庫中查找相應(yīng)的主節(jié)點(diǎn), 并在查獲的主節(jié)點(diǎn)下檢查配置的資源無沖突;分配子節(jié)點(diǎn),將所述事件配置屬性或所述動作配置屬性作為子節(jié)點(diǎn)配置填充,初始化所述子鏈表節(jié)點(diǎn);打開寫保護(hù)鎖,將配置的子節(jié)點(diǎn)加入所述主節(jié)點(diǎn)下相應(yīng)的子鏈表尾端,釋放所述寫保護(hù)鎖。
11.按照權(quán)利要求10所述的方法,其特征在于,所述隔離層啟動的所述定期掃描,具體包括根據(jù)從所述輸入資源配置庫中獲取的所述事件配置屬性,定期掃描輸入資源配置庫中配置的每一主節(jié)點(diǎn)下的每一子節(jié)點(diǎn),通過與所述資源驅(qū)動層之間的資源操作接口讀取相應(yīng)輸入端口的輸入狀態(tài),若根據(jù)所述事件配置屬性確定所述輸入狀態(tài)為事件觸發(fā)狀態(tài),則按所述事件配置屬性規(guī)定的事件上報(bào)模式上報(bào)所述輸入端口觸發(fā)的事件;或者,根據(jù)從所述輸出資源配置庫中獲取的所述動作配置屬性,定期掃描輸出資源配置庫中配置的每一主節(jié)點(diǎn)下的每一子節(jié)點(diǎn),根據(jù)所述動作配置屬性確定該子節(jié)點(diǎn)的動作可執(zhí)行,則依據(jù)對應(yīng)的輸出資源當(dāng)前應(yīng)輸出的邏輯狀態(tài)并結(jié)合所述動作配置屬性中定義的有效電平計(jì)算實(shí)際輸出電平,然后通過與所述資源驅(qū)動層之間的資源操作接口來改變相應(yīng)輸出端口的輸出狀態(tài)。
12.—種實(shí)現(xiàn)多任務(wù)管理輸入輸出資源的系統(tǒng),包括應(yīng)用層模塊和資源驅(qū)動層模塊,其特征在于,還包括預(yù)先加載的隔離層模塊;其中資源驅(qū)動層模塊,用于記錄物理層中輸入輸出資源及其屬性,通過資源注冊接口向隔離層發(fā)出資源注冊請求;隔離層模塊,用于在初始化時(shí)根據(jù)所述資源注冊請求將要管理的輸入輸出資源及其屬性注冊到一資源池中;根據(jù)應(yīng)用層模塊的請求從所述資源池查獲輸入輸出資源,并返回給應(yīng)用層模塊;將應(yīng)用層模塊所需的輸入輸出資源配置到資源配置庫中;應(yīng)用層模塊,用于將通過所述隔離層模塊從所述資源池探測獲取的輸入輸出資源及其配置屬性向所述隔離層模塊下發(fā)資源配置請求。
13.按照權(quán)利要求12所述的系統(tǒng),其特征在于,所述隔離層模塊在所述初始化時(shí)還啟動定期掃描配置在所述資源配置庫中的所述輸入輸出資源。
14.按照權(quán)利要求12或13所述的系統(tǒng),其特征在于,所述資源池是一個(gè)能夠動態(tài)更改的鏈表數(shù)據(jù)結(jié)構(gòu),該鏈表中的每一節(jié)點(diǎn)用于記錄每一輸入輸出的資源屬性信息和指向相鄰的前后輸入輸出資源節(jié)點(diǎn)的指針,所述資源屬性信息包括資源的名稱、物理地址、輸入輸出方向以及有效電平中的一種或多種。
15.按照權(quán)利要求14所述的系統(tǒng),其特征在于,所述資源配置庫包括輸入資源配置庫和輸出資源配置庫,所述輸入資源配置庫和輸出資源配置庫均是一個(gè)能夠動態(tài)更改的二維鏈表數(shù)據(jù)結(jié)構(gòu),包括主節(jié)點(diǎn)和子節(jié)點(diǎn),所述主節(jié)點(diǎn)包含一鏈表節(jié)點(diǎn)和一個(gè)子鏈表頭;其中所述主節(jié)點(diǎn),對于輸出資源配置庫是一個(gè)用來區(qū)分動作集的動作標(biāo)識碼;對于輸入資源配置庫是一個(gè)輸入資源的物理地址;所述鏈表節(jié)點(diǎn),用來指向與本主節(jié)點(diǎn)相鄰的前后主節(jié)點(diǎn);所述子鏈表頭,作為輸出資源配置庫用于指向主節(jié)點(diǎn)下動作集子鏈表的起始子節(jié)點(diǎn)和結(jié)束子節(jié)點(diǎn);作為輸入資源配置庫用于指向主節(jié)點(diǎn)下事件集子鏈表的起始子節(jié)點(diǎn)和結(jié)束子節(jié)占.I— /、、、 所述子節(jié)點(diǎn)包含子鏈表節(jié)點(diǎn),用于指向與本子節(jié)點(diǎn)相鄰的前后子節(jié)點(diǎn)。
16.按照權(quán)利要求12或13所述的系統(tǒng),其特征在于,所述隔離層模塊進(jìn)一步包括依次相連的如下模塊管理初始化模塊,用于在初始化時(shí)清空所述資源池、所述輸入資源配置庫和所述輸出資源配置庫,根據(jù)所述資源注冊請求將所述資源注冊到所述資源池中;根據(jù)所述應(yīng)用層模塊的資源探測請求將查獲的所述資源返回給所述應(yīng)用層模塊;資源配置模塊,用于根據(jù)所述資源配置請求,將所述應(yīng)用層模塊下發(fā)的輸出資源及其動作配置屬性配置到所述輸出資源配置庫中,或?qū)⑺鰬?yīng)用層模塊下發(fā)的輸入資源及其事件配置屬性配置到所述輸入資源配置庫中;資源操作模塊,用于根據(jù)從所述輸入資源配置庫中獲取的所述事件配置屬性,掃描輸入資源配置庫中配置的每一主節(jié)點(diǎn)下的子節(jié)點(diǎn),通過與所述資源驅(qū)動層模塊的資源操作接口讀取輸入端口的輸入狀態(tài),將確定為事件觸發(fā)狀態(tài)上報(bào)給所述應(yīng)用層模塊;或者,根據(jù)從所述輸出資源配置庫中獲取的所述動作配置屬性,定期掃描輸出資源配置庫中配置的每一主節(jié)點(diǎn)下的子節(jié)點(diǎn);依據(jù)輸出資源當(dāng)前應(yīng)輸出的邏輯狀態(tài)并結(jié)合有效電平計(jì)算實(shí)際輸出電平,通過所述資源操作接口來改變相應(yīng)輸出端口的輸出狀態(tài)。
全文摘要
本發(fā)明披露了一種實(shí)現(xiàn)多任務(wù)管理輸入輸出資源的方法及系統(tǒng),其中方法包括隔離層在初始化時(shí),初始化處理用于管理所述輸入輸出資源的資源池和資源配置庫,根據(jù)資源驅(qū)動層的資源注冊請求將要管理的資源注冊到資源池中;應(yīng)用層根據(jù)通過所述隔離層從資源池探測獲取的輸入輸出資源向隔離層下發(fā)資源配置請求;隔離層根據(jù)所述資源配置請求將相應(yīng)的輸入輸出資源配置到資源配置庫中。通過本發(fā)明能夠集中、統(tǒng)一地管理GPIO資源,避免因底層對GPIO資源的更改而使上層所有針對其應(yīng)用也隨之改動,從而極大程度地滿足跨產(chǎn)品的快速移植和開發(fā)的發(fā)展需要。
文檔編號G06F9/44GK102566996SQ20101059640
公開日2012年7月11日 申請日期2010年12月20日 優(yōu)先權(quán)日2010年12月20日
發(fā)明者蔡宇 申請人:中興通訊股份有限公司