專利名稱:用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于電子計(jì)算機(jī)領(lǐng)域,涉及一種用于嵌入式系統(tǒng)的子程序相互調(diào)用的方 法。
背景技術(shù):
嵌入式系統(tǒng)在廣義上說就是計(jì)算機(jī)系統(tǒng),它包括除了以通用為目的的計(jì)算機(jī)之外 的所有計(jì)算機(jī)。與通用計(jì)算機(jī)系統(tǒng)可以滿足多種任務(wù)不同,嵌入式系統(tǒng)只能完成某些特定 目的的任務(wù)。部分為嵌入式系統(tǒng)編寫的程序被稱為固件,他們存儲(chǔ)在只讀存儲(chǔ)器或閃存芯 片中,他們運(yùn)行在資源有限的計(jì)算機(jī)硬件中。嵌入式系統(tǒng)中的子程序在運(yùn)行時(shí)使用的全局 /局部變量以及子程序調(diào)用時(shí)的返回地址都占用RAM空間,隨著嵌套調(diào)用的層次增加,占用 的RAM空間也越大,而嵌入式系統(tǒng)中RAM空間十分有限。此外,一個(gè)子程序的bug很容易影 響到其他子程序。在某些單片機(jī)中,一些功能寄存器上電后只能寫一次,使用這些寄存器時(shí),必須整 體規(guī)劃,從而降低了程序的靈活性。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種能最大限度隔離子程序之間的聯(lián)系,徹 底釋放先前運(yùn)行子程序占用的資源,以及復(fù)位子程序?qū)\(yùn)行環(huán)境的修改的用于嵌入式系統(tǒng) 的子程序相互調(diào)用的方法。為解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)方案。一種用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法包括以下步驟步驟一,嵌入式系統(tǒng)啟動(dòng)運(yùn)行時(shí),設(shè)置初始環(huán)境,檢查初始標(biāo)志,決定調(diào)用的哪個(gè) 子程序;步驟二,開始運(yùn)行子程序清除復(fù)位標(biāo)志,設(shè)置獨(dú)立的子程序運(yùn)行環(huán)境,然后進(jìn)入 子程序主體;步驟三,當(dāng)需要調(diào)用另一個(gè)子程序時(shí),設(shè)置復(fù)位標(biāo)志及調(diào)用參數(shù),重新啟動(dòng)CPU,從 而轉(zhuǎn)入步驟一。作為本發(fā)明的一種優(yōu)選方案,所述獨(dú)立的子程序運(yùn)行環(huán)境是通過重新啟動(dòng)CPU來 實(shí)現(xiàn)的。作為本發(fā)明的另一種優(yōu)選方案,所述CPU是通過硬復(fù)位而不是軟復(fù)位來重新啟動(dòng) 的,所述硬復(fù)位包括設(shè)置看門狗,或復(fù)位信號;所述軟復(fù)位包括直接跳到CPU上電時(shí)執(zhí)行的 第一條指令運(yùn)行。作為本發(fā)明的再一種優(yōu)選方案,通過設(shè)置看門狗重啟CPU的一種設(shè)置方法,設(shè)置 的子程序運(yùn)行環(huán)境有A1、設(shè)置看門狗;A2、設(shè)置中斷向量;A3、設(shè)置定時(shí)器。作為本發(fā)明的再一種優(yōu)選方案,通過硬復(fù)位重啟CPU的一種設(shè)置方法,調(diào)用子程 序的操作為
B1、關(guān)閉中斷源,屏蔽中斷;B2、設(shè)置復(fù)位標(biāo)志為特征值,設(shè)置子程序地址標(biāo)志為子程序的入口地址;設(shè)置傳遞 給子程序的參數(shù);B3、停止復(fù)位看門狗,等待看門狗復(fù)位CPU,從而運(yùn)行子程序。作為本發(fā)明的再一種優(yōu)選方案,步驟一中,所述設(shè)置初始環(huán)境包括設(shè)置初始堆棧, 清零中斷向量表。作為本發(fā)明的再一種優(yōu)選方案,步驟一中,所述檢查初始標(biāo)志包括檢查復(fù)位標(biāo)志, 以及子程序地址標(biāo)志。本發(fā)明的有益效果在于1)每個(gè)子程序都可使用幾乎全部的RAM ;2)硬復(fù)位后,一次性寫的寄存器可再寫;3)最大限度的隔離了子程序bug對別的子程序的干擾;4)每個(gè)子程序都可獲得獨(dú)立的運(yùn)行環(huán)境。
圖1為子程序調(diào)用方法的示意圖;
具體實(shí)施例方式下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)說明。實(shí)施例本實(shí)施例提供一種用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法,該方法包括以下步 驟一種用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法包括以下步驟步驟一,嵌入式系統(tǒng)啟動(dòng)運(yùn)行時(shí),設(shè)置初始環(huán)境,檢查初始標(biāo)志,決定調(diào)用哪個(gè)子 程序;所述設(shè)置初始環(huán)境包括設(shè)置初始堆棧,清零中斷向量表;所述檢查初始標(biāo)志包括檢 查復(fù)位標(biāo)志,以及子程序地址標(biāo)志;初始標(biāo)志可以放在RAM、或外部存儲(chǔ)設(shè)備中,也可用I/O 標(biāo)不。步驟二,開始運(yùn)行子程序,首先清除復(fù)位標(biāo)志,設(shè)置獨(dú)立的子程序運(yùn)行環(huán)境,然后 進(jìn)入子程序主體;所述獨(dú)立的子程序運(yùn)行環(huán)境是通過硬復(fù)位CPU來實(shí)現(xiàn)的;所述硬復(fù)位CPU 是通過設(shè)置看門狗或復(fù)位信號來重新啟動(dòng)的;設(shè)置的子程序運(yùn)行環(huán)境有A1、設(shè)置看門狗;A2、設(shè)置低電壓偵測;A3、設(shè)置省電模式;A4、設(shè)置時(shí)鐘生成器;A5、設(shè)置中斷向量;A6、設(shè)置定時(shí)器。步驟三,當(dāng)需要調(diào)用另一個(gè)子程序時(shí),操作為B1、關(guān)閉中斷源,屏蔽中斷;
4
B2、設(shè)置復(fù)位標(biāo)志為特征值,設(shè)置子程序地址標(biāo)志為子程序的入口地址,設(shè)置傳遞 給子程序的參數(shù);B3、停止復(fù)位看門狗,等待看門狗復(fù)位CPU,進(jìn)入步驟一。本發(fā)明所述方法通過檢查復(fù)位標(biāo)志和子程序地址標(biāo)志,決定調(diào)用哪個(gè)子程序。每 個(gè)子程序均包括設(shè)置獨(dú)立的子程序運(yùn)行環(huán)境和子程序主體兩部分;本發(fā)明所述子程序相互 調(diào)用的方法的流程如圖1所示。從圖1可以看出,本發(fā)明所述子程序調(diào)用方法可以使復(fù)位 后一次性寫的寄存器可以再設(shè)置,每個(gè)子程序都可以徹底的初始化自己的運(yùn)行環(huán)境。子程 序之間只有少量標(biāo)志和參數(shù)傳遞外,沒有其他聯(lián)系,硬件都重新初始化,實(shí)現(xiàn)了最大程度的 隔離,避免相互干擾,當(dāng)然也隔離了 bug的干擾。每個(gè)子程序幾乎使用的全部RAM,最大限度 的利用了資源。這里本發(fā)明的描述和應(yīng)用是說明性的,并非想將本發(fā)明的范圍限制在上述實(shí)施例 中。這里所披露的實(shí)施例的變形和改變是可能的,對于那些本領(lǐng)域的普通技術(shù)人員來說實(shí) 施例的替換和等效的各種部件是公知的。本領(lǐng)域技術(shù)人員應(yīng)該清楚的是,在不脫離本發(fā)明 的精神或本質(zhì)特征的情況下,本發(fā)明可以以其他形式、結(jié)構(gòu)、布置、比例,以及用其他元件、 材料和部件來實(shí)現(xiàn)。
權(quán)利要求
一種用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法,其特征在于,包括以下步驟步驟一,嵌入式系統(tǒng)啟動(dòng)運(yùn)行時(shí),設(shè)置初始環(huán)境,檢查初始標(biāo)志,決定調(diào)用的哪個(gè)子程序;步驟二,開始運(yùn)行子程序清除復(fù)位標(biāo)志,設(shè)置獨(dú)立的子程序運(yùn)行環(huán)境,然后進(jìn)入子程序主體;步驟三,當(dāng)需要調(diào)用另一個(gè)子程序時(shí),設(shè)置復(fù)位標(biāo)志及調(diào)用參數(shù),重新啟動(dòng)CPU,從而轉(zhuǎn)入步驟一。
2.根據(jù)權(quán)利要求1所述的用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法,其特征在于所 述獨(dú)立的子程序運(yùn)行環(huán)境是通過重新啟動(dòng)CPU來實(shí)現(xiàn)的。
3.根據(jù)權(quán)利要求2所述的用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法,其特征在于所 述CPU是通過硬復(fù)位而不是軟復(fù)位來重新啟動(dòng)的,所述硬復(fù)位包括設(shè)置看門狗,或復(fù)位信 號;所述軟復(fù)位包括直接跳到CPU上電時(shí)執(zhí)行的第一條指令運(yùn)行。
4.根據(jù)權(quán)利要求3所述的用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法,其特征在于執(zhí) 行步驟三時(shí),通過硬復(fù)位調(diào)用子程序的步驟為B1、停止響應(yīng)中斷;B2、設(shè)置復(fù)位標(biāo)志為特征值,在子程序地址標(biāo)志中保存子程序的入口地址;設(shè)置傳遞給 子程序的參數(shù);B3、硬復(fù)位,重新啟動(dòng)CPU。
5.根據(jù)權(quán)利要求1至4任意一項(xiàng)所述的用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法,其 特征在于步驟一中,所述檢查初始標(biāo)志包括檢查復(fù)位標(biāo)志,以及子程序地址標(biāo)志。
全文摘要
本發(fā)明公開了一種用于嵌入式系統(tǒng)的子程序相互調(diào)用的方法,包括以下步驟步驟一,嵌入式系統(tǒng)啟動(dòng)運(yùn)行時(shí),設(shè)置初始環(huán)境,檢查初始標(biāo)志,決定調(diào)用的哪個(gè)子程序;步驟二,開始運(yùn)行子程序,首先清除復(fù)位標(biāo)志,設(shè)置獨(dú)立的子程序運(yùn)行環(huán)境,然后進(jìn)入子程序主體;步驟三,當(dāng)需要調(diào)用另一個(gè)子程序時(shí),重復(fù)步驟二。本發(fā)明的有益效果在于1)每個(gè)子程序都可使用幾乎全部的RAM;2)最大限度的隔離了子程序之間的相互聯(lián)系;3)每個(gè)子程序都可獲得獨(dú)立的運(yùn)行環(huán)境。
文檔編號G06F9/48GK101853181SQ20101017047
公開日2010年10月6日 申請日期2010年5月11日 優(yōu)先權(quán)日2010年5月11日
發(fā)明者劉應(yīng)軍, 董愛榮 申請人:中達(dá)電通股份有限公司