欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種將中斷處理程序底半部搬移到應用層的方法及應用的制作方法

文檔序號:6492677閱讀:424來源:國知局
一種將中斷處理程序底半部搬移到應用層的方法及應用的制作方法
【專利摘要】本發(fā)明涉及一種將中斷處理程序底半部搬移到應用層的方法,以及基于所述方法的一種在應用層對中斷處理程序底半部進行處理的方法。本發(fā)明的有益效果如下:(1)對中斷處理程序的修改變得簡單,只需在應用層修改應用程序即可,不涉及到內(nèi)核層的修改,對研發(fā)人員的要求比較低;(2)對中斷處理程序的修改調(diào)試工作變得靈活,開銷小。只需要應用開發(fā)人員參與即可,不需要驅(qū)動開發(fā)人員和應用開發(fā)人員協(xié)同工作;(3)中斷產(chǎn)生后,應用程序設置的中斷事件回調(diào)函數(shù)被調(diào)用,該回調(diào)函數(shù)進行中斷處理,在形式上與內(nèi)核層的中斷處理函數(shù)完全一致,從應用程序的角度來講,就像在應用層直接開發(fā)中斷處理程序一樣。
【專利說明】一種將中斷處理程序底半部搬移到應用層的方法及應用
【技術領域】
[0001]本發(fā)明涉及Iinux下的中斷處理機制,更具體地說,涉及一種將中斷處理程序底半部搬移到應用層的方法,以及基于所述方法的一種在應用層對中斷處理程序底半部進行處理的方法。
【背景技術】
[0002]Linux將中斷處理程序分解為兩個半部:頂半部(top half)和底半部(bottomhalf)。頂半部完成盡可能少的比較緊急的功能,它往往只是簡單地讀取寄存器中的中斷狀態(tài)并清除中斷標志后就進行“登記中斷”的工作。這樣,頂半部執(zhí)行的速度就會很快,可以服務更多的中斷請求。接下來比較費時的任務就可以交給底半部來完成,可以說,中斷處理的底半部完成中斷事件的絕大多數(shù)任務,幾乎做了中斷處理程序所有的事情。Linux下中斷處理底半部的實現(xiàn)機制主要有tasklet,工作隊列和軟中斷。
[0003]不管底半部采用什么機制實現(xiàn),他都是在驅(qū)動程序中實現(xiàn)的,也就是說在內(nèi)核模式下實現(xiàn)的。如果需要對中斷處理程序進行修改,譬如因為車輛環(huán)境的不同對里程脈沖統(tǒng)計的方法的修改,因為車輛環(huán)境的不同對傳感器信號去抖方法的修改等,則需要在內(nèi)核模式下修改和調(diào)試驅(qū)動程序。這樣帶來的問題是,一是修改難度大,需要在內(nèi)核層修改,對研發(fā)人員的要求高;二是不夠靈活、開銷大,因為驅(qū)動程序處于操作系統(tǒng)和應用程序的中間層,每次修改都需要涉及到驅(qū)動程序開發(fā)人員和應用開發(fā)人員的配合聯(lián)調(diào),花費的人力資源多。
[0004]中國發(fā)明專利申請200810117341.1提供一種實現(xiàn)中斷底半部機制的方法及嵌入式系統(tǒng),其中,方法包括:嵌入式操作系統(tǒng)收到中斷請求后,執(zhí)行中斷操作,轉(zhuǎn)到中斷處理頂半部模塊;所述中斷處理頂半部模塊執(zhí)行中斷處理程序后,轉(zhuǎn)到底半部中斷管理任務模塊;所述管理任務模塊執(zhí)行底半部管理任務,所述底半部管理任務為嵌入式操作系統(tǒng)的具有高于常規(guī)任務的優(yōu)先級的系統(tǒng)任務,所述底半部管理任務調(diào)用中斷處理底半部模塊;所述中斷處理底半部模塊執(zhí)行中斷處理底半部程序。本發(fā)明通過嵌入式操作系統(tǒng)的具有最高任務優(yōu)先級的系統(tǒng)任務來完成中斷頂半部和底半部的銜接,簡單易行、響應快速、代碼量很少,更適合于嵌入式應用領域。
[0005]上述發(fā)明專利申請的技術方案主要用于解決了中斷頂半部和底半部銜接效果差的問題,但仍使用現(xiàn)有的中斷處理機制,同樣存在不足:一、修改難度大,需要在內(nèi)核層修改,對研發(fā)人員的要求高;二、不夠靈活、開銷大,因為驅(qū)動程序處于操作系統(tǒng)和應用程序的中間層,每次修改都需要涉及到驅(qū)動程序開發(fā)人員和應用開發(fā)人員的配合聯(lián)調(diào),花費的人力資源多。

【發(fā)明內(nèi)容】

[0006]本發(fā)明的目的在于克服現(xiàn)有技術的不足,提供一種對中斷處理程序的修改變得簡單,對中斷處理程序的修改調(diào)試工作變得靈活,開銷小的一種Linux下將中斷處理程序底半部搬移到應用層的方法,并將其用于在應用層處理中斷底半部的應用中。
[0007]本發(fā)明的技術方案如下:
[0008]一種Linux下將中斷處理程序底半部搬移到應用層的方法,步驟如下:
[0009]I)內(nèi)核層驅(qū)動程序完成中斷頂半部處理后,對中斷事件進行廣播通知;
[0010]2)應用層動態(tài)庫程序接收內(nèi)核層驅(qū)動程序發(fā)出的中斷事件廣播通知;
[0011]3)應用層動態(tài)庫程序創(chuàng)建全局鏈表、回調(diào)函數(shù)注冊接口,全局鏈表用于存儲向回調(diào)函數(shù)注冊接口注冊的回調(diào)函數(shù);
[0012]4)應用層應用程序定義中斷底半部處理函數(shù),并向回調(diào)函數(shù)注冊接口進行注冊,存儲于全局鏈表,形成中斷底半部處理回調(diào)函數(shù);
[0013]5)應用層動態(tài)庫程序取出全局鏈表中的中斷底半部處理回調(diào)函數(shù),完成中斷底半部處理。
[0014]作為優(yōu)選,內(nèi)核層驅(qū)動程序位于系統(tǒng)的內(nèi)核層,應用層動態(tài)庫程序、應用層應用程序位于系統(tǒng)的應用層。
[0015]作為優(yōu)選,步驟I)具體為:
[0016]1.1)內(nèi)核層驅(qū)動程序向系統(tǒng)內(nèi)核注冊中斷頂半部處理函數(shù),用于接收硬件中斷信號并進行頂半部處理;
[0017]1.2)內(nèi)核層驅(qū)動程序創(chuàng)建第一 netlink套接字,用于向系統(tǒng)廣播中斷事件。
[0018]作為優(yōu)選,步驟2)具體為:應用層動態(tài)庫程序創(chuàng)建第二 netlink套接字、廣播通知接收線程,用于接收內(nèi)核層驅(qū)動程序發(fā)出的中斷事件廣播通知。
[0019]作為優(yōu)選,全局鏈表中存儲的是頭指針,鏈表中每個節(jié)點存儲的是一個函數(shù)的調(diào)用地址。
[0020]作為優(yōu)選,回調(diào)函數(shù)注冊接口為系統(tǒng)動態(tài)庫向應用層提供的接口,通過回調(diào)函數(shù)注冊接口將向其注冊的函數(shù)加入到全局鏈表中。
[0021]作為優(yōu)選,步驟1.1)具體為:將自定義的函數(shù)作為request_irq函數(shù)的參數(shù)傳入到系統(tǒng)內(nèi)核,自定義的函數(shù)即可中斷頂半部處理函數(shù),并用于接收硬件中斷信號并進行中斷頂半部處理。
[0022]作為優(yōu)選,步驟1.2)具體為:利用netlink_kernel_create函數(shù),通過第一netlink套接字對象向系統(tǒng)內(nèi)核、應用層發(fā)送廣播通知。
[0023]作為優(yōu)選,廣播通知接收線程的實現(xiàn)具體為:創(chuàng)建自定義線程,并在該自定義線程中循環(huán)讀取第二 netlink套接字對象實現(xiàn)對中斷事件廣播通知的接收。
[0024]一種在應用層對中斷處理程序底半部進行處理的方法,步驟如下:
[0025]A)中斷產(chǎn)生;
[0026]B)將中斷處理程序底半部搬移到應用層;
[0027]C)在應用層對中斷底半部進行處理;
[0028]步驟B)利用將中斷處理程序底半部搬移到應用層的方法進行操作。
[0029]本發(fā)明的有益效果如下:
[0030](I)對中斷處理程序的修改變得簡單,只需在應用層修改應用程序即可,不涉及到內(nèi)核層的修改,對研發(fā)人員的要求比較低;
[0031](2)對中斷處理程序的修改調(diào)試工作變得靈活,開銷小。只需要應用開發(fā)人員參與即可,不需要驅(qū)動開發(fā)人員和應用開發(fā)人員協(xié)同工作;
[0032](3)中斷產(chǎn)生后,應用程序設置的中斷事件回調(diào)函數(shù)被調(diào)用,該回調(diào)函數(shù)進行中斷處理,在形式上與內(nèi)核層的中斷處理函數(shù)完全一致,從應用程序的角度來講,就像在應用層直接開發(fā)中斷處理程序一樣。
【專利附圖】

【附圖說明】
[0033]圖1是本發(fā)明所述的方法應用的系統(tǒng)框架示意圖。
【具體實施方式】
[0034]以下結(jié)合附圖及實施例對本發(fā)明進行進一步的詳細說明。
[0035]一種Linux下將中斷處理程序底半部搬移到應用層的方法,步驟如下:
[0036]I)內(nèi)核層驅(qū)動程序完成中斷頂半部處理后,對中斷事件進行廣播通知;步驟I)具體為:
[0037]1.1)內(nèi)核層驅(qū)動程序向系統(tǒng)內(nèi)核注冊中斷頂半部處理函數(shù),用于接收硬件中斷信號并進行頂半部處理;具體為:將自定義的函數(shù)作為request_irq函數(shù)的參數(shù)傳入到系統(tǒng)內(nèi)核,自定義的函數(shù)即可中斷頂半部處理函數(shù),并用于接收硬件中斷信號并進行中斷頂半部處理;
[0038]1.2)內(nèi)核層驅(qū)動程序創(chuàng)建第一 netlink套接字,用于向系統(tǒng)廣播中斷事件;具體為:利用netlink_kernel_create函數(shù),通過第一 netlink套接字對象向系統(tǒng)內(nèi)核、應用層發(fā)送廣播通知;
[0039]2)應用層動態(tài)庫程序接收內(nèi)核層驅(qū)動程序發(fā)出的中斷事件廣播通知;具體為:應用層動態(tài)庫程序創(chuàng)建第二 netlink套接字、廣播通知接收線程,用于接收內(nèi)核層驅(qū)動程序發(fā)出的中斷事件廣播通知;其中,廣播通知接收線程的實現(xiàn)具體為:創(chuàng)建自定義線程,并在該自定義線程中循環(huán)讀取第二 netlink套接字對象實現(xiàn)對中斷事件廣播通知的接收;
[0040]3)應用層動態(tài)庫程序創(chuàng)建全局鏈表、回調(diào)函數(shù)注冊接口,全局鏈表用于存儲向回調(diào)函數(shù)注冊接口注冊的回調(diào)函數(shù);全局鏈表中存儲的是頭指針,鏈表中每個節(jié)點存儲的是一個函數(shù)的調(diào)用地址;回調(diào)函數(shù)注冊接口為系統(tǒng)動態(tài)庫向應用層提供的接口,通過回調(diào)函數(shù)注冊接口將向其注冊的函數(shù)加入到全局鏈表中;
[0041]4)應用層應用程序定義中斷底半部處理函數(shù),并向回調(diào)函數(shù)注冊接口進行注冊,存儲于全局鏈表,形成中斷底半部處理回調(diào)函數(shù);
[0042]5)應用層動態(tài)庫程序取出全局鏈表中的中斷底半部處理回調(diào)函數(shù),完成中斷底半部處理。
[0043]如圖1所示,內(nèi)核層驅(qū)動程序位于系統(tǒng)的內(nèi)核層,應用層動態(tài)庫程序、應用層應用程序位于系統(tǒng)的應用層,中斷事件來自硬件層的底層硬件。
[0044]內(nèi)核層驅(qū)動程序在內(nèi)核層運行,主要負責完成中斷頂半部的處理和向整個系統(tǒng)發(fā)出一個中斷事件的廣播通知。當一個硬件中斷到來時,內(nèi)核層驅(qū)動程序的中斷頂半部處理函數(shù)被調(diào)用,這個部分的處理與普通的驅(qū)動程序沒有區(qū)別,只是在中斷頂半部處理函數(shù)的最后,多出一個對中斷事件進行廣播通知的處理,這個廣播通知采用net I ink機制實現(xiàn),在應用層的程序和內(nèi)核層的程序都可以接收這個廣播通知。[0045]應用層動態(tài)庫程序在應用層運行,主要負責接收內(nèi)核層驅(qū)動程序發(fā)出的中斷事件廣播通知和對應用層應用程序注冊的中斷底半部處理函數(shù)進行回調(diào)。
[0046]應用層應用程序在應用層運行,主要利用應用層動態(tài)庫程序提供的接口函數(shù),注冊中斷底半部處理回調(diào)函數(shù)和進行中斷底半部函數(shù)的業(yè)務處理,譬如根據(jù)里程脈沖的統(tǒng)計方法進行里程統(tǒng)計,根據(jù)傳感器信號的特點對信號進行去抖處理和信號的有效性判斷等。
[0047]一種在應用層對中斷處理程序底半部進行處理的方法,步驟如下:
[0048]A)中斷產(chǎn)生;
[0049]B)將中斷處理程序底半部搬移到應用層;
[0050]C)在應用層對中斷底半部進行處理;
[0051]步驟B)利用將中斷處理程序底半部搬移到應用層的方法進行操作。
[0052]實施例
[0053]Linux下將中斷處理程序底半部搬移到應用層的方法,具體實施步驟如下:
[0054]I)內(nèi)核層驅(qū)動程序向內(nèi)核注冊一個中斷頂半部處理函數(shù),以便接收硬件中斷信號并進行頂半部處理;向內(nèi)核注冊中斷頂半部處理函數(shù)是Iinux內(nèi)核提供的一個接口,使用request_irq函數(shù)來實現(xiàn),將一個普通的函數(shù)作為request_irq函數(shù)的參數(shù)傳入到內(nèi)核,這個普通函數(shù)就變成了中斷頂半部處理函數(shù),可以接收硬件中斷信號并進行中斷頂半部處理;
[0055]2)內(nèi)核層驅(qū)動程序創(chuàng)建一個netlink套接字,以便向系統(tǒng)廣播中斷事件;創(chuàng)建netlink套接字是Iinux內(nèi)核提供的一個接口,使用netlink_kernel_create函數(shù)來實現(xiàn),通過創(chuàng)建的netlink套接字對象可以向內(nèi)核空間和用戶空間發(fā)送廣播通知;
[0056]3)應用層動態(tài)庫程序創(chuàng)建一個netlink套接字和一個廣播通知接收線程,以便接收內(nèi)核層驅(qū)動程序發(fā)出的中斷事件廣播通知;廣播通知接收線程是通過創(chuàng)建一個普通的線程并且在該線程中循環(huán)讀取netlink套接字對象來實現(xiàn)的。如果有廣播通知,讀取netlink套接字對象的函數(shù)就可以返回并獲得廣播通知的具體內(nèi)容;
[0057]4)應用層動態(tài)庫程序創(chuàng)建一個中斷底半部處理回調(diào)函數(shù)的全局鏈表,以便存儲所有利用應用層動態(tài)庫程序的回調(diào)函數(shù)注冊接口進行注冊中斷底半部處理回調(diào)函數(shù);這個全局鏈表使用list_head數(shù)據(jù)結(jié)構來定義,它本質(zhì)上是一個鏈表的頭指針,鏈表中每個節(jié)點存儲的是一個函數(shù)的調(diào)用地址,這些函數(shù)我們稱之為中斷底半部處理回調(diào)函數(shù)。本來,中斷底半部處理函數(shù)是針對一個完整中斷處理過程的延遲處理部分,是在Iinux內(nèi)核代碼中才能實現(xiàn)的,我們這里將一個完整中斷處理過程的延遲處理部分搬移到了應用層,因此也稱這個全局鏈表節(jié)點中的函數(shù)為中斷底半部處理函數(shù)。
[0058]list_head數(shù)據(jù)結(jié)構的定義如下:
[0059]struct list_hed{
[0060]struct list—head氺next,氺prev;
[0061]};
[0062]5)應用層動態(tài)庫程序創(chuàng)建一個回調(diào)函數(shù)注冊接口,以便其他應用層應用程序向他注冊中斷底半部處理回調(diào)函數(shù);這個回調(diào)函數(shù)注冊接口的作用就是將所注冊的中斷底半部處理函數(shù)加入到上文提到的全局鏈表中,他是一個動態(tài)庫向應用層提供的接口,具體采用下面的函數(shù)定義來實現(xiàn):[0063]int set_interrupt_event_callback_func(void(*event_calIback)(intevent));
[0064]6)應用層應用程序定義一個中斷底半部處理函數(shù),完成對中斷事件的延遲處理,譬如根據(jù)里程脈沖的統(tǒng)計方法進行里程統(tǒng)計,根據(jù)傳感器信號的特點對信號進行去抖處理和信號的有效性判斷等。
[0065]7)應用層應用程序利用應用層動態(tài)庫程序的回調(diào)函數(shù)注冊接口注冊一個中斷底半部處理函數(shù)。
[0066]一種在應用層對中斷處理程序底半部進行處理的方法,具體實施步驟如下:
[0067]A) 一個硬件中斷產(chǎn)生;
[0068]B)內(nèi)核層驅(qū)動程序的中斷頂半部處理函數(shù)運行,并且發(fā)送中斷事件廣播通知;
[0069]C)應用層動態(tài)庫程序的廣播通知接收線程收到內(nèi)核層驅(qū)動程序發(fā)出的中斷事件廣播通知;
[0070]D)應用層動態(tài)庫程序從中斷底半部處理回調(diào)函數(shù)的全局鏈表中逐個取出回調(diào)函數(shù),并以一一進行調(diào)用;
[0071]E)應用層應用程序中的中斷底半部處理回調(diào)函數(shù)被應用層動態(tài)庫程序調(diào)用,按照該函數(shù)的內(nèi)容進行執(zhí)行,完成中斷底半部的處理。
[0072]上述實施例僅是用來說明本發(fā)明,而并非用作對本發(fā)明的限定。只要是依據(jù)本發(fā)明的技術實質(zhì),對上述實施例進行變化、變型等都將落在本發(fā)明的權利要求的范圍內(nèi)。
【權利要求】
1.一種Linux下將中斷處理程序底半部搬移到應用層的方法,其特征在于,步驟如下: O內(nèi)核層驅(qū)動程序完成中斷頂半部處理后,對中斷事件進行廣播通知; 2)應用層動態(tài)庫程序接收內(nèi)核層驅(qū)動程序發(fā)出的中斷事件廣播通知; 3)應用層動態(tài)庫程序創(chuàng)建全局鏈表、回調(diào)函數(shù)注冊接口,全局鏈表用于存儲向回調(diào)函數(shù)注冊接口注冊的回調(diào)函數(shù); 4)應用層應用程序定義中斷底半部處理函數(shù),并向回調(diào)函數(shù)注冊接口進行注冊,存儲于全局鏈表,形成中斷底半部處理回調(diào)函數(shù); 5)應用層動態(tài)庫程序取出全局鏈表中的中斷底半部處理回調(diào)函數(shù),完成中斷底半部處理。
2.根據(jù)權利要求1所述的Linux下將中斷處理程序底半部搬移到應用層的方法,其特征在于,內(nèi)核層驅(qū)動程序位于系統(tǒng)的內(nèi)核層,應用層動態(tài)庫程序、應用層應用程序位于系統(tǒng)的應用層。
3.根據(jù)權利要求1所述的Linux下將中斷處理程序底半部搬移到應用層的方法,其特征在于,步驟I)具體為: 1.1)內(nèi)核層驅(qū)動程序向系統(tǒng)內(nèi)核注冊中斷頂半部處理函數(shù),用于接收硬件中斷信號并進行頂半部處理; 1.2)內(nèi)核層驅(qū)動程序創(chuàng)建`第一 netlink套接字,用于向系統(tǒng)廣播中斷事件。
4.根據(jù)權利要求1所述的Linux下將中斷處理程序底半部搬移到應用層的方法,其特征在于,步驟2)具體為:應用層動態(tài)庫程序創(chuàng)建第二 netlink套接字、廣播通知接收線程,用于接收內(nèi)核層驅(qū)動程序發(fā)出的中斷事件廣播通知。
5.根據(jù)權利要求1所述的Linux下將中斷處理程序底半部搬移到應用層的方法,其特征在于,全局鏈表中存儲的是頭指針,鏈表中每個節(jié)點存儲的是一個函數(shù)的調(diào)用地址。
6.根據(jù)權利要求1所述的Linux下將中斷處理程序底半部搬移到應用層的方法,其特征在于,回調(diào)函數(shù)注冊接口為系統(tǒng)動態(tài)庫向應用層提供的接口,通過回調(diào)函數(shù)注冊接口將向其注冊的函數(shù)加入到全局鏈表中。
7.根據(jù)權利要求3所述的Linux下將中斷處理程序底半部搬移到應用層的方法,其特征在于,步驟1.0具體為:將自定義的函數(shù)作為request_irq函數(shù)的參數(shù)傳入到系統(tǒng)內(nèi)核,自定義的函數(shù)即可中斷頂半部處理函數(shù),并用于接收硬件中斷信號并進行中斷頂半部處理。
8.根據(jù)權利要求3所述的Linux下將中斷處理程序底半部搬移到應用層的方法,其特征在于,步驟1.2)具體為:利用netlink_kernel_create函數(shù),通過第一 netlink套接字對象向系統(tǒng)內(nèi)核、應用層發(fā)送廣播通知。
9.根據(jù)權利要求4所述的Linux下將中斷處理程序底半部搬移到應用層的方法,其特征在于,廣播通知接收線程的實現(xiàn)具體為:創(chuàng)建自定義線程,并在該自定義線程中循環(huán)讀取第二 netlink套接字對象實現(xiàn)對中斷事件廣播通知的接收。
10.一種在應用層對中斷處理程序底半部進行處理的方法,其特征在于,步驟如下: A)中斷產(chǎn)生; B)將中斷處理程序底半部搬移到應用層; C)在應用層對中斷底半部進行處理;步驟B)利用權利要求1至9任一項所述的將中斷處理程序底半部搬移到應用層的方法進行操作。`
【文檔編號】G06F9/48GK103870326SQ201210532215
【公開日】2014年6月18日 申請日期:2012年12月11日 優(yōu)先權日:2012年12月11日
【發(fā)明者】彭勇, 許寧, 任賦, 鄭福弟 申請人:廈門雅迅網(wǎng)絡股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
巴马| 乌拉特前旗| 施秉县| 泸州市| 靖边县| 汉阴县| 锡林郭勒盟| 石嘴山市| 阳朔县| 万山特区| 铜陵市| 中江县| 锦屏县| 友谊县| 岐山县| 贡嘎县| 留坝县| 菏泽市| 兴海县| 洛宁县| 太谷县| 汉中市| 哈巴河县| 黑河市| 宁夏| 禄丰县| 嫩江县| 大渡口区| 民县| 济南市| 遵义市| 荥经县| 卫辉市| 福鼎市| 蒙阴县| 山丹县| 焉耆| 漳浦县| 安阳市| 朝阳市| 翁牛特旗|