[發(fā)明專利]一種嵌入式平臺(tái)下的多任務(wù)運(yùn)行方法有效
| 申請(qǐng)?zhí)枺?/td> | 202010326392.6 | 申請(qǐng)日: | 2020-04-23 |
| 公開(公告)號(hào): | CN111538579B | 公開(公告)日: | 2023-02-03 |
| 發(fā)明(設(shè)計(jì))人: | 唐漢釗;喬子龍;粟汝發(fā);王璞;王宇;徐源長(zhǎng) | 申請(qǐng)(專利權(quán))人: | 山東華芯半導(dǎo)體有限公司 |
| 主分類號(hào): | G06F9/48 | 分類號(hào): | G06F9/48;G06F9/50 |
| 代理公司: | 濟(jì)南泉城專利商標(biāo)事務(wù)所 37218 | 代理人: | 趙玉鳳 |
| 地址: | 250101 山東省濟(jì)南市高新*** | 國(guó)省代碼: | 山東;37 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 嵌入式 平臺(tái) 任務(wù) 運(yùn)行 方法 | ||
1.一種嵌入式平臺(tái)下的多任務(wù)運(yùn)行方法,其特征在于:本方法在進(jìn)入C語言main函數(shù)后,通過子函數(shù)調(diào)用的方式搭建任務(wù)環(huán)境并進(jìn)行任務(wù)調(diào)度過程;
本方法在內(nèi)存中為每一個(gè)任務(wù)分配獨(dú)立的棧空間,使各個(gè)任務(wù)運(yùn)行過程互不干擾;
某一任務(wù)占用CPU運(yùn)行時(shí),該任務(wù)的運(yùn)行信息寫入CPU寄存器中,其他任務(wù)的運(yùn)行信息存入對(duì)應(yīng)的棧中;
運(yùn)行中的任務(wù)通過主動(dòng)暫停運(yùn)行或者被動(dòng)暫停運(yùn)行的方式實(shí)現(xiàn)隨時(shí)暫停并切換至其他任務(wù),切換任務(wù)時(shí),將CPU存儲(chǔ)器的值寫入被暫停業(yè)務(wù)對(duì)應(yīng)的棧中,保存被暫停任務(wù)的運(yùn)行狀態(tài),然后選取下一項(xiàng)需要運(yùn)行的任務(wù),將被選取任務(wù)對(duì)應(yīng)棧中的數(shù)據(jù)填入CPU寄存器中,使下一項(xiàng)任務(wù)在先前任務(wù)暫停的位置上繼續(xù)運(yùn)行;
為實(shí)現(xiàn)任務(wù)管理,本方法設(shè)有任務(wù)數(shù)據(jù)記錄模塊,用于存儲(chǔ)任務(wù)的基本信息,每個(gè)任務(wù)數(shù)據(jù)記錄模塊的內(nèi)容包括任務(wù)函數(shù)入口地址、任務(wù)對(duì)應(yīng)的棧起始地址、任務(wù)對(duì)應(yīng)的棧棧頂位置,任務(wù)數(shù)據(jù)記錄模塊的最大數(shù)量決定了同步執(zhí)行的任務(wù)數(shù)量,每個(gè)任務(wù)數(shù)據(jù)記錄模塊與其對(duì)應(yīng)任務(wù)分配的棧空間一一對(duì)應(yīng);為實(shí)現(xiàn)多任務(wù)的加載和運(yùn)行,本方法設(shè)計(jì)3個(gè)運(yùn)行函數(shù),分別為:任務(wù)數(shù)據(jù)記錄模塊初始化函數(shù)、任務(wù)注冊(cè)函數(shù)、任務(wù)調(diào)度函數(shù);
任務(wù)數(shù)據(jù)記錄模塊初始化函數(shù)用于清空所有任務(wù)數(shù)據(jù)記錄模塊,并將所有任務(wù)數(shù)據(jù)記錄模塊放入空閑隊(duì)列中,并置工作隊(duì)列為空隊(duì)列;如果啟動(dòng)被動(dòng)暫停任務(wù)模式,則同時(shí)負(fù)責(zé)初始化定時(shí)器;
任務(wù)注冊(cè)函數(shù)負(fù)責(zé)從空閑隊(duì)列中獲取一個(gè)任務(wù)數(shù)據(jù)記錄模塊并填入任務(wù)信息,然后將該任務(wù)數(shù)據(jù)記錄模塊加入到工作隊(duì)列頭部,同時(shí)在該任務(wù)數(shù)據(jù)記錄模塊對(duì)應(yīng)的棧中,按照CPU寄存器出棧要求寫入包括任務(wù)函數(shù)入口地址、棧指針位置在內(nèi)的運(yùn)行信息;
任務(wù)調(diào)度函數(shù)在任務(wù)切換時(shí)將CPU寄存器的內(nèi)容存入當(dāng)前任務(wù)棧,根據(jù)工作隊(duì)列的排列順序,找到下一個(gè)任務(wù)數(shù)據(jù)記錄模塊,并根據(jù)該任務(wù)數(shù)據(jù)記錄模塊提供的棧位置將任務(wù)運(yùn)行信息寫入CPU寄存器,觸發(fā)CPU執(zhí)行該項(xiàng)任務(wù),如果當(dāng)前任務(wù)已處于工作隊(duì)列尾部,則返回工作隊(duì)列頭部進(jìn)行查找;
基于任務(wù)數(shù)據(jù)記錄模塊和運(yùn)行函數(shù)實(shí)現(xiàn)多任務(wù)并行處理的具體過程為:
S01)、在程序main函數(shù)中調(diào)用任務(wù)數(shù)據(jù)記錄模塊初始化函數(shù),清空所有任務(wù)數(shù)據(jù)記錄模塊,并將所有任務(wù)數(shù)據(jù)記錄模塊放入空閑隊(duì)列中,清空工作隊(duì)列;
S02)、如果被動(dòng)暫停運(yùn)行模式被開啟,任務(wù)數(shù)據(jù)記錄模塊初始化函數(shù)初始化定時(shí)器,并將計(jì)時(shí)值設(shè)置為指定值;
S03)、在main函數(shù)中調(diào)用任務(wù)注冊(cè)函數(shù),將第1個(gè)任務(wù)的入口地址作為參數(shù)傳入任務(wù)注冊(cè)函數(shù);
S04)、任務(wù)注冊(cè)函數(shù)從空閑隊(duì)列中取出一個(gè)任務(wù)數(shù)據(jù)記錄模塊并填入任務(wù)信息,將該任務(wù)數(shù)據(jù)記錄模塊加入到工作隊(duì)列頭部,同時(shí)在該任務(wù)數(shù)據(jù)記錄模塊對(duì)應(yīng)的棧中,按照CPU出棧要求寫入包括任務(wù)函數(shù)入口地址、棧指針位置在內(nèi)的運(yùn)行信息;
S05)、如有其它任務(wù)需要同步運(yùn)行,則重復(fù)步驟S03、S04,直至所有任務(wù)注冊(cè)完畢;
S06)、在main函數(shù)中調(diào)用任務(wù)調(diào)度函數(shù),該函數(shù)將當(dāng)前CPU寄存器的內(nèi)容存入main函數(shù)的程序棧中,并從工作隊(duì)列的起始位置獲取任務(wù)數(shù)據(jù)記錄模塊,根據(jù)該模塊提供的棧位置將對(duì)應(yīng)任務(wù)的對(duì)應(yīng)信息寫入CPU寄存器,觸發(fā)CPU執(zhí)行該項(xiàng)任務(wù);
S07)、任務(wù)中可在任何位置嵌入任務(wù)調(diào)度函數(shù),運(yùn)行任務(wù)調(diào)度函數(shù)時(shí)會(huì)將CPU寄存器的內(nèi)容存入當(dāng)前任務(wù)對(duì)應(yīng)的棧,從而保證下次調(diào)用該任務(wù)時(shí),可以從中斷的位置繼續(xù)執(zhí)行;根據(jù)工作隊(duì)列的排列順序,尋找下一個(gè)任務(wù)數(shù)據(jù)記錄模塊,根據(jù)該模塊提供的棧位置將任務(wù)運(yùn)行信息寫入CPU寄存器,觸發(fā)CPU執(zhí)行該項(xiàng)任務(wù);
S08)、如果被動(dòng)暫停運(yùn)行模式被開啟,且定時(shí)器計(jì)時(shí)達(dá)到設(shè)定好的指定值時(shí),若當(dāng)前任務(wù)仍未主動(dòng)調(diào)用任務(wù)調(diào)度函數(shù),則超時(shí)中斷信號(hào)被發(fā)送至CPU,此時(shí)中斷處理函數(shù)直接調(diào)用任務(wù)調(diào)度函數(shù),按照步驟S07中的過程強(qiáng)制執(zhí)行任務(wù)切換;
S09)、如果當(dāng)前任務(wù)執(zhí)行結(jié)束,則觸發(fā)任務(wù)結(jié)束處理功能,將任務(wù)數(shù)據(jù)記錄模塊由工作隊(duì)列移出并加至空閑隊(duì)列,并清除任務(wù)數(shù)據(jù)記錄模塊中的數(shù)據(jù),保證再次啟用調(diào)度時(shí)不會(huì)再調(diào)用本任務(wù),完成上述工作后,任務(wù)調(diào)度函數(shù)跳轉(zhuǎn)至下一項(xiàng)任務(wù)的結(jié)束處理工作;
S10)、所有任務(wù)均運(yùn)行結(jié)束后,任務(wù)調(diào)度函數(shù)將步驟S06中保存在main函數(shù)程序棧的數(shù)據(jù)填入CPU寄存器,如果被動(dòng)暫停任務(wù)模式被開啟,任務(wù)調(diào)度函數(shù)關(guān)閉定時(shí)器;
S11)、main函數(shù)繼續(xù)運(yùn)行直至程序結(jié)束。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于山東華芯半導(dǎo)體有限公司,未經(jīng)山東華芯半導(dǎo)體有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010326392.6/1.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 任務(wù)協(xié)作裝置及方法
- 用于量化任務(wù)價(jià)值的任務(wù)管理方法及裝置
- 用于運(yùn)行任務(wù)的系統(tǒng)、方法和裝置
- 一種分布式任務(wù)調(diào)度系統(tǒng)及方法
- 任務(wù)信息處理方法
- 一種同步任務(wù)異步執(zhí)行的方法和調(diào)度系統(tǒng)
- 數(shù)據(jù)處理方法、裝置、電子設(shè)備及計(jì)算機(jī)可讀介質(zhì)
- 一種自動(dòng)分配和推送的任務(wù)管理平臺(tái)及方法
- 程序執(zhí)行控制的裝置及方法、終端和存儲(chǔ)介質(zhì)
- 基于會(huì)話的任務(wù)待辦方法、系統(tǒng)、電子設(shè)備及存儲(chǔ)介質(zhì)
- 運(yùn)行控制裝置及運(yùn)行控制方法
- 運(yùn)行支援裝置、運(yùn)行支援系統(tǒng)以及運(yùn)行支援程序
- 列車運(yùn)行處理方法、運(yùn)行處理裝置和運(yùn)行調(diào)度系統(tǒng)
- 運(yùn)行監(jiān)測(cè)系統(tǒng)及運(yùn)行監(jiān)測(cè)方法
- 運(yùn)行控制裝置及運(yùn)行控制方法
- 運(yùn)行曲線制作裝置、運(yùn)行輔助裝置以及運(yùn)行控制裝置
- 運(yùn)行支持裝置、車輛、運(yùn)行管理裝置和運(yùn)行支持方法
- 運(yùn)行計(jì)劃方法、運(yùn)行控制裝置和運(yùn)行計(jì)劃系統(tǒng)
- 運(yùn)行控制裝置、運(yùn)行管理系統(tǒng)、運(yùn)行控制方法以及車輛
- 自動(dòng)建模運(yùn)行系統(tǒng)及運(yùn)行方法





