專利名稱:一種處理器程序調(diào)度方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件開發(fā)領(lǐng)域,尤其涉及8位、16位等中低端處理器程序開發(fā)中的程 序調(diào)度方法及裝置。
背景技術(shù):
處理器,一般有高端和低端之分。高端處理器,例如高端單片機(jī),高端單片機(jī)的系 統(tǒng)資源豐富,一般移植有操作系統(tǒng)。低端處理器,例如8位、16位等中低端單片機(jī),中低端單 片機(jī)的系統(tǒng)資源有限,如果移植操作系統(tǒng),由于操作系統(tǒng)占用大量的系統(tǒng)資源,使得單片機(jī) 執(zhí)行效率低下,甚至不能運(yùn)行。以中低端單片機(jī)為例,現(xiàn)有的做法是,在單片機(jī)程序中設(shè)置一個(gè)主程序,主程序中 設(shè)置一個(gè)無限循環(huán)的main函數(shù),此main函數(shù)實(shí)現(xiàn)單片機(jī)的所有功能。采取這種方式的缺陷是,一個(gè)無限循環(huán)的main函數(shù)完成單片機(jī)程序的所有功能, 使得程序的結(jié)構(gòu)性變差,尤其當(dāng)單片機(jī)的功能較多,程序較大時(shí),幾乎沒有什么結(jié)構(gòu)性,并 且,程序員想要維護(hù)或修改單片機(jī)程序時(shí),也會(huì)變得很困難。同時(shí),這種方式的單片機(jī)執(zhí)行 效率也很低,因?yàn)閙ain函數(shù)采用自上而下的執(zhí)行機(jī)制,這種機(jī)制的缺點(diǎn)在于,不知道能實(shí) 現(xiàn)特定功能的子函數(shù)在哪里,只能從main函數(shù)的第一條語句開始執(zhí)行,直到觸發(fā)到期望的 子函數(shù),才執(zhí)行子函數(shù),實(shí)現(xiàn)特定的功能。如果實(shí)現(xiàn)特定功能的子函數(shù)在main函數(shù)的尾部, 這將是一件十分耗時(shí)的事情。因此,現(xiàn)有技術(shù)中,中低端單片機(jī)程序存在的缺陷是結(jié)構(gòu)復(fù)雜,執(zhí)行效率低。
發(fā)明內(nèi)容
本發(fā)明要解決的主要技術(shù)問題是,提供一種處理器程序的調(diào)度方法和裝置,采用 該方法和裝置能提高處理器程序的結(jié)構(gòu)性,并且執(zhí)行效率高。為解決上述技術(shù)問題,本發(fā)明提供一種單片機(jī)程序調(diào)度方法,包括在處理器程序中設(shè)置至少一個(gè)用于實(shí)現(xiàn)預(yù)定功能的任務(wù)函數(shù),并為每一個(gè)任務(wù)函 數(shù)配置任務(wù)ID ;設(shè)置消息隊(duì)列,所述消息隊(duì)列中的每一條消息包括一任務(wù)ID和傳送數(shù)據(jù)指針;提取消息隊(duì)列中的消息,根據(jù)消息中的任務(wù)ID查找對應(yīng)的任務(wù)函數(shù),并把消息中 的傳送數(shù)據(jù)指針傳遞給任務(wù)函數(shù),調(diào)度任務(wù)執(zhí)行操作。在本發(fā)明的一優(yōu)選實(shí)施例中,處理器為單片機(jī)。在本發(fā)明的一優(yōu)選實(shí)施例中,消息還包括消息ID,根據(jù)消息中的任務(wù)ID查找對應(yīng) 的任務(wù)函數(shù)后,把消息中的消息ID和傳送數(shù)據(jù)指針傳遞給任務(wù)函數(shù),調(diào)度任務(wù)函數(shù)執(zhí)行操作。在本發(fā)明的另一實(shí)施例中,消息隊(duì)列包括中斷消息隊(duì)列和任務(wù)消息隊(duì)列,中斷消 息隊(duì)列的優(yōu)先級(jí)高于任務(wù)消息隊(duì)列,提取消息隊(duì)列中的消息具體包括判斷中斷消息隊(duì)列 是否有消息,如有,則從中斷消息隊(duì)列取消息,如否,則判斷任務(wù)消息隊(duì)列是否有消息,如
3有,則從任務(wù)消息隊(duì)列中取消息,如否,則調(diào)用鉤子函數(shù)。進(jìn)一步地,消息隊(duì)列為環(huán)形隊(duì)列,提取消息隊(duì)列中的消息時(shí),按先入先出的原則提 取消息隊(duì)中的消息。本發(fā)明還公開了一種處理器程序調(diào)度裝置,包括任務(wù)函數(shù)模塊,用于在處理器程序中設(shè)置至少一個(gè)用于實(shí)現(xiàn)預(yù)定功能的任務(wù)函 數(shù),并為每一個(gè)任務(wù)函數(shù)配置任務(wù)ID ;消息隊(duì)列模塊,用于設(shè)置消息隊(duì)列,消息隊(duì)列中的每一條消息包括一任務(wù)ID和傳 送數(shù)據(jù)指針;發(fā)送模塊,用于提取消息隊(duì)列中的消息,根據(jù)消息中的任務(wù)ID查找對應(yīng)的任務(wù)函 數(shù),并把消息中的傳送數(shù)據(jù)指針傳遞給任務(wù)函數(shù),調(diào)度任務(wù)函數(shù)執(zhí)行操作。在本發(fā)明的一種優(yōu)選實(shí)施例中,處理器為單片機(jī)處理器,在本發(fā)明的一種優(yōu)選實(shí)施例中,消息還包括消息ID,所述根據(jù)消息中的任務(wù)ID查 找對應(yīng)的任務(wù)函數(shù)后,把消息中的消息ID和傳送數(shù)據(jù)指針傳遞給任務(wù)函數(shù),調(diào)度任務(wù)函數(shù) 執(zhí)行操作。在本發(fā)明的另一實(shí)施例中,消息隊(duì)列包括中斷消息隊(duì)列和任務(wù)消息隊(duì)列,中斷消 息隊(duì)列的優(yōu)先級(jí)高于任務(wù)消息隊(duì)列,所述提取消息隊(duì)列中的消息具體包括判斷所述中斷 消息隊(duì)列是否有消息,如有,則從所述中斷消息隊(duì)列取消息,如否,則判斷所述任務(wù)消息隊(duì) 列是否有消息,如有,則從所述任務(wù)消息隊(duì)列中取消息,如否,則調(diào)用鉤子函數(shù)。本發(fā)明的有益效果是處理器包括至少一個(gè)任務(wù)函數(shù),提高了程序的結(jié)構(gòu)性,使得程序更利于程序員維 護(hù)或修改,針對特定任務(wù)函數(shù)的修改不會(huì)影響其它的任務(wù)函數(shù)。同時(shí),將包括任務(wù)ID和傳 送數(shù)據(jù)指針在內(nèi)的消息作為觸發(fā)任務(wù)函數(shù)執(zhí)行的觸發(fā)機(jī)制,提高了執(zhí)行效率,即通過任務(wù) ID(任務(wù)號(hào))索引對應(yīng)的任務(wù)函數(shù),通過傳遞傳送數(shù)據(jù)指針給任務(wù)函數(shù)的方式完成任務(wù)函 數(shù)的運(yùn)行,提高了單片機(jī)的執(zhí)行效率。一種優(yōu)選的方式中,消息包括消息號(hào),在向任務(wù)函數(shù)傳遞傳送數(shù)據(jù)指針時(shí),傳遞消 息ID(消息號(hào))給任務(wù)函數(shù),由消息ID更精確的索引任務(wù)函數(shù)將要執(zhí)行的操作,進(jìn)一步的 提高程序的執(zhí)行效率。只是消息ID、任務(wù)函數(shù)ID和傳送數(shù)據(jù)指針都要占用一定的空間,根 據(jù)實(shí)際情況合理設(shè)置消息的組成能達(dá)到最佳的效果。
圖1為本發(fā)明一種實(shí)施例的單片機(jī)程序調(diào)度方法流程圖;圖2為本發(fā)明一種實(shí)施例的任務(wù)表圖;圖3為本發(fā)明一種實(shí)施例的消息隊(duì)列結(jié)構(gòu)圖;圖4為本發(fā)明一種實(shí)施例的設(shè)置消息隊(duì)列流程圖;圖5為本發(fā)明一種實(shí)施例的調(diào)度任務(wù)函數(shù)流程圖;圖6為本發(fā)明一種實(shí)施例的單片機(jī)程序調(diào)度裝置結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面通過具體實(shí)施方式
結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
處理器包括高端處理器和中低端處理器,以單片機(jī)為例,高端的有,64位單片機(jī), 中低端的有8位、16位等單片機(jī)。對于高端處理器來說,一般移植有操作系統(tǒng),運(yùn)行速度比 較快,而中低端處理器由于系統(tǒng)資源有限,不適合移植操作系統(tǒng),所以處理器程序的調(diào)度方 法對于提高處理器運(yùn)行速度顯得更為重要。下面以8位,16位單片機(jī)為例,說明本發(fā)明是 處理器程序調(diào)度方法是如何提高程序的執(zhí)行效率??梢岳斫獾氖牵m然本發(fā)明比較適合沒 有移植操作系統(tǒng)的中低端處理器,尤其是8位、16位等中低端單片機(jī),但如果高端處理器, 比如高端單片機(jī)采用本發(fā)明構(gòu)思的程序調(diào)度方法,一樣屬于本發(fā)明保護(hù)的范圍。下面,以8 位、16位等中低端單片機(jī)為例,具體說明本發(fā)明的發(fā)明構(gòu)思現(xiàn)有技術(shù)中,中低端單片機(jī)一般采用在main函數(shù)中設(shè)置一個(gè)無限循環(huán)的方式來 實(shí)現(xiàn)用戶功能,這種方式使得單片機(jī)的程序結(jié)構(gòu)性變差,尤其當(dāng)用戶要實(shí)現(xiàn)的功能很多時(shí), 程序會(huì)很復(fù)雜,此時(shí)main函數(shù)幾乎沒有結(jié)構(gòu)性,這給程序員進(jìn)行維護(hù)或修改用戶程序帶來 了很大的困擾。同時(shí),main函數(shù)的運(yùn)行機(jī)制加上程序結(jié)構(gòu)性差等因素,導(dǎo)致現(xiàn)有技術(shù)中的 單片機(jī)執(zhí)行效率低,不能快速的實(shí)現(xiàn)期望的功能?;诖?,本發(fā)明首先將單片機(jī)程序劃分為一個(gè)個(gè)用于實(shí)現(xiàn)預(yù)定功能的任務(wù)函數(shù), 以此提高單片機(jī)程序的結(jié)構(gòu)性,增加了程序員或用戶修改程序的方便性。然后以消息事件 驅(qū)動(dòng)任務(wù)函數(shù)執(zhí)行預(yù)定的功能,從而提高了程序的執(zhí)行效率。在此過程中,各個(gè)任務(wù)共享系 統(tǒng)堆棧,有利于節(jié)約系統(tǒng)資源。實(shí)施例1 如圖1所示,本發(fā)明實(shí)施例提供了一種單片機(jī)程序調(diào)度方法,包括11、在單片機(jī)程序中設(shè)置至少一個(gè)任務(wù)函數(shù),任務(wù)函數(shù)用于實(shí)現(xiàn)預(yù)定的功能,并為 每個(gè)任務(wù)函數(shù)配置任務(wù)ID。12、設(shè)置消息隊(duì)列,消息隊(duì)列中每一條消息包括任務(wù)ID和傳送數(shù)據(jù)指針;13、提取消息隊(duì)列中的消息,根據(jù)任務(wù)ID索引對應(yīng)的任務(wù)函數(shù),并向其傳遞傳送 數(shù)據(jù)指針,調(diào)度任務(wù)函數(shù)執(zhí)行操作。步驟11中,單片機(jī)程序中任務(wù)函數(shù)的個(gè)數(shù)根據(jù)實(shí)際情況而定,任務(wù)函數(shù)的功能也 由用戶或程序員預(yù)先確定,每個(gè)任務(wù)函數(shù)可以只實(shí)現(xiàn)一個(gè)功能,也可以實(shí)現(xiàn)多個(gè)功能。每個(gè) 任務(wù)函數(shù)由與之對應(yīng)的任務(wù)ID索引,如圖2所求,在一種實(shí)施方式中,配置有專門用于索引任務(wù)函數(shù)的任務(wù)表,該表包 括任務(wù)ID和任務(wù)函數(shù)句柄,任務(wù)ID和任務(wù)函數(shù)句柄一一對應(yīng),任務(wù)函數(shù)句柄就是對應(yīng)就任 務(wù)函數(shù)的函數(shù)指針,也就是任務(wù)函數(shù)入口指針。此表中,任務(wù)ID和任務(wù)函數(shù)句柄可以由用 戶填寫,該表在代碼中的表現(xiàn)形式可以是二維數(shù)組的形式。當(dāng)然,也可以根據(jù)實(shí)際情況靈活設(shè)置。步驟12中,消息隊(duì)列中的每一條消息包括任務(wù)ID和傳送數(shù)據(jù)指針。任務(wù)ID對應(yīng) 任務(wù)函數(shù)句柄,即任務(wù)函數(shù)指針,用于索引任務(wù)函數(shù),傳送數(shù)據(jù)指針用于任務(wù)間發(fā)送消息時(shí) 附帶傳遞的參數(shù),如果有數(shù)據(jù)需要傳遞,可將待傳遞數(shù)據(jù)的指針填充到該項(xiàng),如果沒有數(shù)據(jù) 需要傳遞,該傳送數(shù)據(jù)指針為空。如圖3所示,在一種實(shí)施方式中,消息隊(duì)列為環(huán)形隊(duì)列,該消息隊(duì)列可以表示中斷 消息隊(duì)列,也可以表示任務(wù)消息隊(duì)列,中斷消息隊(duì)列和任務(wù)消息隊(duì)列的形狀和結(jié)構(gòu)相同。該 消息隊(duì)列中的每一條消息除包括所述的任務(wù)ID和傳送數(shù)據(jù)指針外,還包括消息ID (即消息號(hào))。該消息ID號(hào)為用戶自己定義,每個(gè)ID表示什么由用戶根據(jù)業(yè)務(wù)需要指定。比如,單 片機(jī)運(yùn)行過程中,根據(jù)消息中的任務(wù)ID找到該任務(wù)對應(yīng)的任務(wù)函數(shù),然后調(diào)用該函數(shù)并將 消息ID和傳送數(shù)據(jù)指針做為函數(shù)參數(shù)傳遞給該任務(wù)函數(shù),消息ID用于指示任務(wù)函數(shù)具體 實(shí)現(xiàn)什么功能。也就是說,任務(wù)函數(shù)可能具有多個(gè)功能,而消息ID則提示任務(wù)函數(shù)實(shí)現(xiàn)其 中的一個(gè)或幾個(gè)功能,具體實(shí)現(xiàn)幾個(gè),由用戶預(yù)定義。也就是,程序執(zhí)行過程中,用任務(wù)ID 索引一個(gè)大范圍(任務(wù)函數(shù)),用消息ID精確索一個(gè)小范圍(任務(wù)函數(shù)中的某個(gè)功能),從 而可以更有效的提高程序的結(jié)構(gòu)性和運(yùn)行效率,尤其是在程序功能較多的情況下,更加有 效。實(shí)際情況中,消息ID和任務(wù)ID —般占用一個(gè)字節(jié),傳送數(shù)據(jù)指針在8位單片機(jī)中占用 1位字節(jié),在16單片機(jī)中占用2個(gè)字,但這并不是唯一的方式,具體占用字節(jié)數(shù)可以根據(jù)實(shí) 際情況合理確定。圖示中,SIZE表示該消息隊(duì)列可以存放的消息個(gè)數(shù),比如,SIZE = 11表示,該消息 隊(duì)列可以存放11個(gè)消息,IN表示消息存入的地址,OUT表示取消息時(shí),第一個(gè)需要取消息的 地址。當(dāng)OUT = IN時(shí)為初始狀態(tài),此時(shí)消息隊(duì)列為空;當(dāng)IN+1 = OUT時(shí),消息隊(duì)列滿。消 息在此隊(duì)列按照先入先出的方式存放。如圖4所示,表示了一種實(shí)施方式中設(shè)置消息隊(duì)列流程圖,該實(shí)施方式中,消息隊(duì) 列為環(huán)形隊(duì)列。圖示設(shè)置消息隊(duì)列流程即可以表示設(shè)置中斷消息隊(duì)列流程,也可以表示設(shè) 置任務(wù)消息隊(duì)列流程。該流程具體包括1)、首先判斷IN加1是否等于OUT,如果等于,表示當(dāng)前消息池已經(jīng)放滿消息,沒有 多余的空間存放新消息。此時(shí),則向發(fā)送消息程序返回隊(duì)列滿;如果不等于,則進(jìn)行下步;2)、將消息數(shù)據(jù)(消息號(hào)、任務(wù)號(hào)和傳送數(shù)據(jù)指針)添加到IN指向的地址。3)、IN加1,并判斷加1后的IN與SIZE是否相等。即判斷存入消息后,是否到了 環(huán)形隊(duì)列的尾部,如果是,則將IN置為0,重新回到環(huán)形隊(duì)列頭部,表示需從環(huán)形隊(duì)列頭部 開始存入消息;如果IN與SIZE不相等,則返回0K,表示可以繼續(xù)在IN加1后所指向的地 址處存放消息。步驟13中,提取消息隊(duì)列中消息時(shí),先判斷消息隊(duì)列是否有消息,如有,則提取消 息,根據(jù)消息觸發(fā)任務(wù)函數(shù)執(zhí)行預(yù)定操作,如否,則調(diào)用執(zhí)行H00K函數(shù),即鉤子函數(shù),鉤子 函數(shù)為特定條件下需要執(zhí)行的回調(diào)函數(shù)。本發(fā)明中,執(zhí)行鉤子函數(shù)和條件是消息隊(duì)列中沒 有消息,該鉤子函數(shù)要執(zhí)行的操作完全由用戶實(shí)現(xiàn),執(zhí)行什么操作都可以,也可以執(zhí)行空操 作。但鉤子函數(shù)不宜做過多操作,否則會(huì)導(dǎo)致系統(tǒng)實(shí)時(shí)性降低,比如,在一種實(shí)施方式中,判 斷消息隊(duì)列中沒有消息后,直接執(zhí)行空操作(也可以用鉤子函數(shù)來實(shí)現(xiàn)),這樣不會(huì)對系統(tǒng) 造成任何影響。如圖5所示,表示了一種實(shí)施方式中調(diào)度任務(wù)函數(shù)流程圖。在本實(shí)施方式中,消 息隊(duì)列包括中斷消息隊(duì)列和任務(wù)消息隊(duì)列,中斷消息隊(duì)列的優(yōu)先級(jí)高于任務(wù)消息隊(duì)列,即 提取消息時(shí),先判斷中斷消息隊(duì)列是否有消息,如有,則從中斷消息隊(duì)列中取消息,如否,則 判斷任務(wù)消息隊(duì)列中是否有消息,如有,則從任務(wù)消息隊(duì)列中取消息,如否,則調(diào)用H00K函 數(shù)。在本實(shí)施方式中消息包括消息號(hào)、任務(wù)號(hào)和傳送數(shù)據(jù)指針,當(dāng)然,也可以不包括消息號(hào), 具體依實(shí)際情況而定。該流程具體過程包括1)、判斷中斷消息隊(duì)列是否有消息,即判斷中斷消息隊(duì)列的IN是否等于0UT,如果
6相等,轉(zhuǎn)到步驟2);如果不相等,即表示中斷消息隊(duì)列中有消息,則從中斷消息隊(duì)列中取消 息,即記錄*0UT的值,也就是記錄OUT指向地址的消息信息(消息ID、任務(wù)ID和傳送數(shù)據(jù) 指針),可以采取將消息入棧的方式保存,然后轉(zhuǎn)到步驟3);2)、判斷任務(wù)消息隊(duì)列中是否有消息,即判斷任務(wù)消息中的IN是否等于OUT,如果 相等,表示任務(wù)消息隊(duì)列也沒有消息,則調(diào)用執(zhí)行HOOK函數(shù)。如不相等,表示任務(wù)消息隊(duì)列 中有消息,則從任務(wù)消息隊(duì)列中取消息,即記錄任務(wù)消息*0UTR值,然后轉(zhuǎn)至步驟4);3)、判斷中斷消息隊(duì)列中OUT是否等于SIZE,如果相等,表明OUT已指向環(huán)形隊(duì)列 尾部,將OUT置0后轉(zhuǎn)到步驟5)。如果不相等,直接轉(zhuǎn)到步驟5);4)、判斷任務(wù)消息隊(duì)列中OUT是否等于SIZE,如果相等,表明OUT已指向環(huán)形隊(duì)列 尾部,將OUT置0后轉(zhuǎn)到步驟5)。如果不相等,直接轉(zhuǎn)到步驟6);5)、根據(jù)保存的消息中的任務(wù)ID索引對應(yīng)的任務(wù)函數(shù),將消息號(hào)和傳送數(shù)據(jù)指針 做為函數(shù)參數(shù)傳遞給任務(wù)函數(shù),任務(wù)函數(shù)根據(jù)消息號(hào)和傳送數(shù)據(jù)指針執(zhí)行操作;6)、根據(jù)保存的消息中的任務(wù)ID索引對應(yīng)的任務(wù)函數(shù),將消息號(hào)和傳送數(shù)據(jù)指針 做為函數(shù)參數(shù)傳遞給任務(wù)函數(shù),任務(wù)函數(shù)根據(jù)消息號(hào)和傳送數(shù)據(jù)指針執(zhí)行操作;7)、返回開始。實(shí)施例2 如圖6所示,一種單片機(jī)程序調(diào)度裝置,包括任務(wù)函數(shù)模塊2,用于在所述單片機(jī)程序中設(shè)置至少一個(gè)用于實(shí)現(xiàn)預(yù)定功能的任 務(wù)函數(shù),并為每一個(gè)任務(wù)函數(shù)配置任務(wù)ID ;消息隊(duì)列模塊1,用于設(shè)置消息隊(duì)列,所述消息隊(duì)列中的每一條消息包括一所述任 務(wù)ID和傳送數(shù)據(jù)指針;發(fā)送模塊3,用于提取消息隊(duì)列中的消息,根據(jù)消息中的任務(wù)ID查找對應(yīng)的任務(wù) 函數(shù),并把消息中的傳送數(shù)據(jù)指針傳遞給任務(wù)函數(shù),調(diào)度任務(wù)函數(shù)根據(jù)傳送的數(shù)據(jù)指針執(zhí) 行任務(wù)。在本實(shí)施例的一種優(yōu)先方式中,消息隊(duì)列模塊中的每一個(gè)消息包括消息ID,根據(jù) 消息中的任務(wù)ID查找對應(yīng)的任務(wù)函數(shù)后,把消息中的消息ID和傳送數(shù)據(jù)指針傳遞給任務(wù) 函數(shù),調(diào)度任務(wù)函數(shù)執(zhí)行操作。在本實(shí)施例的另一實(shí)施方式中,消息模塊包括中斷消息隊(duì)列和任務(wù)消息隊(duì)列,中 斷消息隊(duì)列的優(yōu)先級(jí)高于任務(wù)消息隊(duì)列,提取消息隊(duì)列中的消息具體包括判斷中斷消息 隊(duì)列是否有消息,如有,則從中斷消息隊(duì)列取消息,如否,則判斷任務(wù)消息隊(duì)列是否有消息, 如有,則從任務(wù)消息隊(duì)列中取消息,如否,則調(diào)用鉤子函數(shù)。還可以將消息隊(duì)列設(shè)為環(huán)形隊(duì)列,消息按先入先出的原則排列在消息隊(duì)列中。本發(fā)明實(shí)施例中的單片機(jī)程序調(diào)度方法及裝置,通過將程序劃分為一個(gè)或多個(gè)任 務(wù)函數(shù),每個(gè)任務(wù)函數(shù)實(shí)現(xiàn)一個(gè)功能或是多個(gè)功能或是一系列相關(guān)的功能根據(jù)實(shí)際情況而 定。由于程序由任務(wù)函數(shù)模塊組成,增加了程序的結(jié)構(gòu)性,利于程序員或用戶針對特定部分 修改程序,比如,針對某一任務(wù)函數(shù)。同時(shí),采用消息(包括消息號(hào)、任務(wù)號(hào)和傳送數(shù)據(jù)指 針)作為觸發(fā)任務(wù)函數(shù)的機(jī)制,提高了程序的執(zhí)行速率。因?yàn)?,消息中的任?wù)號(hào)在任務(wù)表中 與任務(wù)函數(shù)指針一一對應(yīng),而任務(wù)函數(shù)指針指向?qū)?yīng)的任務(wù)函數(shù),從而通過任務(wù)ID可以快 速地索引到需要的任務(wù)函數(shù)。然后將消息號(hào)和傳送數(shù)據(jù)指針以函數(shù)參數(shù)的形式傳遞給任務(wù)函數(shù),消息號(hào)可以快速指示任務(wù)函數(shù)實(shí)現(xiàn)的功能,通常情況下,任務(wù)函數(shù)是多個(gè)功能函數(shù)的 集合,當(dāng)然也不排除任務(wù)函數(shù)只實(shí)現(xiàn)一個(gè)功能的情形。傳送數(shù)據(jù)指針指向系統(tǒng)或其它任務(wù) 需要傳遞給任務(wù)函數(shù)的數(shù)據(jù),根據(jù)傳送數(shù)據(jù)指針,任務(wù)函數(shù)可以調(diào)用系統(tǒng)內(nèi)存中對應(yīng)的傳 送數(shù)據(jù),從而實(shí)現(xiàn)預(yù)定的功能。同時(shí),待傳送數(shù)據(jù)存入系統(tǒng)內(nèi)存中,通過傳送數(shù)據(jù)指針?biāo)饕?相當(dāng)于,各任務(wù)可以根據(jù)傳送數(shù)據(jù)指針共享傳送數(shù)據(jù),從而節(jié)約了內(nèi)存,對于系統(tǒng)資源有限 的中低端單片機(jī)尤其重要。通過消息觸發(fā)單片機(jī)程序執(zhí)行預(yù)定功能的方法及裝置,提高了 程序的執(zhí)行效率。 以上內(nèi)容是結(jié)合具體的實(shí)施方式對本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā) 明的具體實(shí)施只局限于這些說明。對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫 離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù) 范圍。
權(quán)利要求
一種處理器程序調(diào)度方法,其特征在于,包括在所述處理器程序中設(shè)置至少一個(gè)用于實(shí)現(xiàn)預(yù)定功能的任務(wù)函數(shù),并為每一個(gè)任務(wù)函數(shù)配置任務(wù)ID;設(shè)置消息隊(duì)列,所述消息隊(duì)列中的每一條消息包括一所述任務(wù)ID和傳送數(shù)據(jù)指針;提取消息隊(duì)列中的消息,根據(jù)消息中的任務(wù)ID查找對應(yīng)的任務(wù)函數(shù),并把消息中的傳送數(shù)據(jù)指針傳遞給任務(wù)函數(shù),調(diào)度任務(wù)函數(shù)執(zhí)行操作。
2.如權(quán)利要求1所述的處理器程序調(diào)度方法,其特征在于,所述處理器為單片機(jī)處理o
3.如權(quán)利要求1或2所述的處理器程序調(diào)度方法,其特征在于,所述消息還包括消息 ID,所述根據(jù)消息中的任務(wù)ID查找對應(yīng)的任務(wù)函數(shù)后,把消息中的消息ID和傳送數(shù)據(jù)指針 傳遞給任務(wù)函數(shù),調(diào)度任務(wù)函數(shù)執(zhí)行操作。
4.如權(quán)利要求3所述的處理器程序調(diào)度方法,其特征在于,所述消息隊(duì)列包括中斷消 息隊(duì)列和任務(wù)消息隊(duì)列,中斷消息隊(duì)列的優(yōu)先級(jí)高于任務(wù)消息隊(duì)列,所述提取消息隊(duì)列中 的消息具體包括判斷所述中斷消息隊(duì)列是否有消息,如有,則從所述中斷消息隊(duì)列取消 息,如否,則判斷所述任務(wù)消息隊(duì)列是否有消息,如有,則從所述任務(wù)消息隊(duì)列中取消息,如 否,則調(diào)用鉤子函數(shù)。
5.如權(quán)利要求4所述的處理器程序調(diào)度方法,其特征在于,所述消息隊(duì)列為環(huán)形隊(duì)列, 提取消息隊(duì)列中的消息時(shí),按先入先出的原則提取所述消息隊(duì)中的消息。
6.如權(quán)利要求1或2所述的處理器程序調(diào)度方法,其特征在于,還包括設(shè)置用于索引任 務(wù)函數(shù)的任務(wù)表,所述任務(wù)表包括一一對應(yīng)的任務(wù)ID和任務(wù)函數(shù)指針,所述任務(wù)函數(shù)指針 指向?qū)?yīng)的任務(wù)函數(shù),通過任務(wù)表實(shí)現(xiàn)任務(wù)ID和任務(wù)函數(shù)的對應(yīng)。
7.—種處理器程序調(diào)度裝置,其特征在于,包括任務(wù)函數(shù)模塊,用于在所述單片機(jī)程序中設(shè)置至少一個(gè)用于實(shí)現(xiàn)預(yù)定功能的任務(wù)函 數(shù),并為每一個(gè)任務(wù)函數(shù)配置任務(wù)ID ;消息隊(duì)列模塊,用于設(shè)置消息隊(duì)列,所述消息隊(duì)列中的每一條消息包括一所述任務(wù)ID 和傳送數(shù)據(jù)指針;發(fā)送模塊,用于提取消息隊(duì)列中的消息,根據(jù)消息中的任務(wù)ID查找對應(yīng)的任務(wù)函數(shù), 并把消息中的傳送數(shù)據(jù)指針傳遞給任務(wù)函數(shù),調(diào)度任務(wù)函數(shù)執(zhí)行操作。
8.如權(quán)利要求7所述的處理器程序調(diào)度裝置,其特征在于,所述處理器程序調(diào)度裝置 為單片機(jī)程序調(diào)度裝置。
9.如權(quán)利要求7或8所述的處理器程序調(diào)度裝置,其特征在于,所述消息還包括消息 ID,所述根據(jù)消息中的任務(wù)ID查找對應(yīng)的任務(wù)函數(shù)后,把消息中的消息ID和傳送數(shù)據(jù)指針 傳遞給任務(wù)函數(shù),調(diào)度任務(wù)函數(shù)執(zhí)行操作。
10.如權(quán)利要求9所述處理器程序調(diào)度裝置,其特征在于,所述消息隊(duì)列包括中斷消息 隊(duì)列和任務(wù)消息隊(duì)列,中斷消息隊(duì)列的優(yōu)先級(jí)高于任務(wù)消息隊(duì)列,所述提取消息隊(duì)列中的 消息具體包括判斷所述中斷消息隊(duì)列是否有消息,如有,則從所述中斷消息隊(duì)列取消息, 如否,則判斷所述任務(wù)消息隊(duì)列是否有消息,如有,則從所述任務(wù)消息隊(duì)列中取消息,如否, 則調(diào)用鉤子函數(shù)。
全文摘要
本發(fā)明公開了一種處理器程序調(diào)度方法及裝置,方法包括在處理器程序中設(shè)置至少一個(gè)用于實(shí)現(xiàn)預(yù)定功能的任務(wù)函數(shù),并為每一個(gè)任務(wù)函數(shù)配置任務(wù)ID;設(shè)置消息隊(duì)列,消息隊(duì)列中的每一條消息包括一任務(wù)ID和傳送數(shù)據(jù)指針;提取消息隊(duì)列中的消息,根據(jù)消息中的任務(wù)ID查找對應(yīng)的任務(wù)函數(shù),并把消息中的傳送數(shù)據(jù)指針傳遞給任務(wù)函數(shù),調(diào)度任務(wù)函數(shù)執(zhí)行操作。本發(fā)明的方法和裝置提高了程序的結(jié)構(gòu)性和程序的執(zhí)行效率。
文檔編號(hào)G06F9/46GK101950260SQ201010278458
公開日2011年1月19日 申請日期2010年9月10日 優(yōu)先權(quán)日2010年9月10日
發(fā)明者冷衛(wèi)杰, 吳明遠(yuǎn), 徐運(yùn), 汪旭光 申請人:中興通訊股份有限公司