两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法

文檔序號:6542888閱讀:271來源:國知局
一種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法
【專利摘要】本發(fā)明涉及一種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法,實(shí)現(xiàn)步驟為:根據(jù)測試用例規(guī)劃測試任務(wù),為各個測試任務(wù)配置任務(wù)屬性,所述任務(wù)屬性包括任務(wù)名稱、任務(wù)周期、任務(wù)優(yōu)先級、開始時間、結(jié)束時間;創(chuàng)建任務(wù)和任務(wù)對應(yīng)的信號量;注冊定時器用于多任務(wù)調(diào)度,建立任務(wù)信息表。本發(fā)明能夠在確定的時間內(nèi)完成運(yùn)算和邏輯處理以及與被測系統(tǒng)的交互,而且能夠在同一時間段內(nèi)完成多項并發(fā)的測試任務(wù),滿足了嵌入式軟件的高實(shí)時性并發(fā)測試要求。
【專利說明】 —種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法,屬于嵌入式軟件測試領(lǐng)域。
【背景技術(shù)】
[0002]嵌入式軟件因為其可裁剪、可靠性高、保密性好等特性被越來越廣泛地應(yīng)用于國防、工控、醫(yī)療等領(lǐng)域。隨著應(yīng)用的加深,嵌入式軟件越來越呈現(xiàn)出高實(shí)時性、高并發(fā)性的特點(diǎn),并且通常嵌入式軟件對可靠性的要求比較高、須經(jīng)過充分測試。
[0003]嵌入式軟件的測試一般分為以下幾種類型:功能測試、性能測試、安全性測試、接口測試等等。其中,最為核心的是功能和性能測試。功能測試要求驗證被測軟件是否正確實(shí)現(xiàn)了需求中的功能,需要測試過程能夠覆蓋被測系統(tǒng)的所有功能分支;性能測試要求驗證被測軟件是否能夠在要求的時間內(nèi)完成功能,能夠在確定的時間內(nèi)給出正確的反饋。
[0004]嵌入式軟件通常需要執(zhí)行高實(shí)時性要求的任務(wù),很可能必須在毫秒級甚至微妙級的時間內(nèi)完成功能,并且往往在一個時間段內(nèi)需要完成多項功能,也就是說,需要完成多項并發(fā)任務(wù),這就要求測試過程必須能夠完成多個功能點(diǎn)的并發(fā)測試;另外,隨著被測系統(tǒng)和被測軟件的復(fù)雜化,測試環(huán)境在一次測試過程中往往需要仿真多個設(shè)備的功能,這就對嵌入式軟件的測試提出了更加嚴(yán)格的實(shí)時性和并發(fā)性要求。
[0005]目前軟件測試領(lǐng)域的現(xiàn)有技術(shù),通常采用1adrunner或類似工具,通過虛擬用戶生成器VuGen,在同一時間段內(nèi)創(chuàng)建成千上萬的虛擬用戶來對被測系統(tǒng)進(jìn)行操作來完成并發(fā)測試,但現(xiàn)有測試方法和工具絕大多數(shù)基于windows平臺,本身定時能力或者說實(shí)時性就不夠強(qiáng),基本只能支持毫秒級的測試,并且并不能嚴(yán)格保證對被測件的多個操作能夠按照預(yù)先設(shè)計好的時序特征執(zhí)行,尤其是windows將大量的資源用于維持本身的界面活動和相應(yīng)鼠標(biāo)鍵盤等硬件的中斷上,進(jìn)一步影響對被測系統(tǒng)執(zhí)行高實(shí)時并發(fā)測試。
[0006]因此,目前需要本領(lǐng)域技術(shù)人員解決的一個迫切的問題就是,提出一種可行的方法,這種方法一方面能夠在確定的時間內(nèi)完成運(yùn)算和邏輯處理以及與被測系統(tǒng)的交互,另一方面,必須能夠在同一時間段內(nèi)完成多項并發(fā)的測試任務(wù),以滿足嵌入式軟件的高實(shí)時性并發(fā)測試要求。
[0007]目前國內(nèi)外文獻(xiàn)尚未有相關(guān)的報道。

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

[0008]本發(fā)明技術(shù)解決問題:克服現(xiàn)有技術(shù)的不足,提供一種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法,該方法能夠在確定的時間內(nèi)完成運(yùn)算和邏輯處理以及與被測系統(tǒng)的交互,而且能夠在同一時間段內(nèi)完成多項并發(fā)的測試任務(wù),滿足了嵌入式軟件的高實(shí)時性并發(fā)測試要求。
[0009]本發(fā)明技術(shù)解決方案:一種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法,一方面能夠在確定的時間內(nèi)完成運(yùn)算和邏輯處理以及與被測系統(tǒng)的交互,另一方面,必須能夠在同一時間段內(nèi)完成多項并發(fā)的測試任務(wù),以滿足嵌入式軟件的高實(shí)時性并發(fā)測試要求。
[0010]本發(fā)明實(shí)現(xiàn)的具體步驟如下:
[0011](I)根據(jù)測試用例規(guī)劃測試任務(wù)
[0012]所述測試用例指對測試流程的描述和約束,是執(zhí)行一次測試的必要的前提和準(zhǔn)備;所述測試任務(wù)是一種測試操作的集合;
[0013]將測試用例分解為各種基本操作;所述基本操作是指將測試用例分解成的最小單元,例如在某一時間點(diǎn)從某個硬件通道向被測件發(fā)送數(shù)據(jù),或者每隔25毫秒從某個硬件通道向被測件發(fā)送數(shù)據(jù);再將各種基本操作按照重要性以及操作的時間特性分配到多個測試任務(wù)中;
[0014](11)將測試用例分解為各種基本操作(比如在某個時間點(diǎn)從某個硬件端口發(fā)送一幀特定數(shù)據(jù)),分解的方法是將測試用例分解為最小的單元,也就是說,無法再次分解為止,例如,某一測試用例為給被測件上電,3秒后從422總線上接收數(shù)據(jù)以便判斷被測件是否自檢成功,則將該測試用例分解為兩個基本操作:一個是測試開始后給被測件上電,第二個是測試過程開始3秒后從422總線上接收數(shù)據(jù);
[0015](12)將(11)中得到的各基本操作按照重要性以及操作的時間特性分配到多個測試任務(wù)中,所述重要性指一個基本操作是否比其他基本操作重要,如果遇到同一個時間點(diǎn)多個基本操作同時需要執(zhí)行的情況,某一個基本操作必須強(qiáng)制的先于其他基本操作運(yùn)行,則認(rèn)為該基本操作比其他基本操作重要;所述操作的時間特性是指基本操作是否存在執(zhí)行開始以及結(jié)束的時間點(diǎn)要求,是否存在需要按照一定周期反復(fù)執(zhí)行的情況;將各基本操作分配到測試任務(wù)中的原則如下:時間特性相同的操作,合并到一個測試任務(wù)中,如果存在不同的時間特性,則將基本操作放到另一個測試任務(wù)中,如果某基本操作的重要性與測試任務(wù)中的其他基本操作不同,則將該基本操作放到另一個測試任務(wù)中;
[0016](2)為各個測試任務(wù)配置任務(wù)屬性,所述任務(wù)屬性包括任務(wù)名稱、任務(wù)周期、任務(wù)優(yōu)先級、開始時間、結(jié)束時間;
[0017](21)為測試任務(wù)命名,測試人員可以對測試任務(wù)進(jìn)行手動命名,否則為測試任務(wù)分配一個不會重復(fù)的名字;
[0018](22)為測試任務(wù)設(shè)置優(yōu)先級,按照步驟(12)獲得的各基本操作的重要性關(guān)系為這些基本操作組成的測試任務(wù)設(shè)置優(yōu)先級,如果需要,測試人員可以手動修改測試任務(wù)的優(yōu)先級;針對周期執(zhí)行的測試任務(wù),為周期小的任務(wù)分配比較高的優(yōu)先級;
[0019](23)對于不需要按照周期執(zhí)行的測試任務(wù),也就是說只要在特定時間點(diǎn)執(zhí)行一次的任務(wù),將其周期和結(jié)束時間設(shè)置為與開始時間相同。對于不需要配置開始時間和結(jié)束時間和結(jié)束時間的測試任務(wù)(也就是說這些測試任務(wù)從測試開始一直執(zhí)行至測試結(jié)束),將其開始時間和結(jié)束時間設(shè)置為零。
[0020](3)創(chuàng)建任務(wù)和任務(wù)對應(yīng)的信號量
[0021](31)調(diào)用VxWorks系統(tǒng)函數(shù)注冊任務(wù),為每個測試任務(wù)對應(yīng)創(chuàng)建一個任務(wù),每個任務(wù)的優(yōu)先級即為測試任務(wù)的優(yōu)先級;
[0022](32)為每個任務(wù)創(chuàng)建一個對應(yīng)的信號量用于控制任務(wù)的狀態(tài);
[0023](33)將測試任務(wù)的實(shí)現(xiàn)寫入對應(yīng)任務(wù)的入口函數(shù),在實(shí)現(xiàn)測試任務(wù)的代碼塊之前加入獲取信號量語句,并且使用死循環(huán)語句使整個代碼塊循環(huán)執(zhí)行,以便保證只要能夠獲取信號量,測試任務(wù)的實(shí)現(xiàn)代碼不停地循環(huán)執(zhí)行;由于無法獲取信號量,所有任務(wù)創(chuàng)建之后處于掛起態(tài);
[0024](4)注冊定時器用于多任務(wù)調(diào)度,定時器的周期按照各任務(wù)的最大公約數(shù)設(shè)置;如果存在任務(wù)配置了開始時間和結(jié)束時間,則將開始時間和結(jié)束時間看作周期加入計算最大公約數(shù)的集合中,以便VxWorks系統(tǒng)能夠計算出最精確的定時器周期;將VxWorks系統(tǒng)的每秒tick數(shù)設(shè)置為Is/定時器周期以避免浪費(fèi)多余的CPU資源;所述tick為VxWorks系統(tǒng)內(nèi)核調(diào)度的最小時間片;
[0025](5)建立任務(wù)信息表,將所有任務(wù)的任務(wù)名稱,任務(wù)優(yōu)先級,任務(wù)周期,開始時間,結(jié)束時間以及對應(yīng)的信號量信息記錄到表中;其中,任務(wù)周期、開始時間和結(jié)束時間不直接記錄時間,而是記錄tick數(shù);然后把任務(wù)信息表中的所有任務(wù)進(jìn)行排序,將所有任務(wù)按照任務(wù)周期從小到大進(jìn)行排序;最后再將所有任務(wù)周期相同的任務(wù)按照優(yōu)先級從高到低排序;
[0026](6)測試開始運(yùn)行后,定時器自動按照各任務(wù)執(zhí)行任務(wù)周期的最大公約數(shù)運(yùn)轉(zhuǎn),在定時器的回調(diào)函數(shù)中,維護(hù)一個全局的tick計數(shù)器,每次進(jìn)入回調(diào)函數(shù)將計數(shù)器加一;遍歷任務(wù)信息表,判斷所有任務(wù)是否到了應(yīng)該執(zhí)行的時刻:如果全局的tick計數(shù)大于等于任務(wù)的開始tick數(shù)并且小于等于任務(wù)的結(jié)束tick數(shù)同時全局的tick計數(shù)對任務(wù)周期tick數(shù)取余為0,則釋放該任務(wù)運(yùn)行所需的信號量,任務(wù)開始執(zhí)行。
[0027]所述步驟(5)中周期tick數(shù)的計算方法為周期tick數(shù)=周期/VxWorks系統(tǒng)調(diào)度最小時間片;所述開始時間tick數(shù)=開始時間/VxWorks系統(tǒng)調(diào)度最小時間片;結(jié)束時間tick數(shù)=結(jié)束時間/VxWorks系統(tǒng)調(diào)度最小時間片。
[0028]本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn)在于:利用VxWorks定時準(zhǔn)確的特點(diǎn),使得測試人員可以利用本方法進(jìn)行微秒級的測試,通過獲得各任務(wù)運(yùn)行周期的最大公約數(shù),復(fù)用定時器,降低了整個系統(tǒng)的運(yùn)行周期,避免多個定時器占用資源以及引起定時紊亂;定時器只負(fù)責(zé)給任務(wù)釋放信號量,任務(wù)的調(diào)度由系統(tǒng)完成,進(jìn)一步的保證了定時器運(yùn)轉(zhuǎn)的準(zhǔn)確性;另一方面,利用VxWorks系統(tǒng)多任務(wù)調(diào)度和信號量同步機(jī)制保證測試人員可以在同一個時間段內(nèi)完成多項測試任務(wù),也就是說,保證了測試的并發(fā)性。本發(fā)明提供了一種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法,這種方法一方面能夠在確定的時間內(nèi)完成運(yùn)算和邏輯處理以及與被測系統(tǒng)的交互,另一方面,能夠在同一時間段內(nèi)完成多項并發(fā)的測試任務(wù),以滿足嵌入式軟件的高實(shí)時性并發(fā)測試要求。
【專利附圖】

【附圖說明】
[0029]圖1為VxWorks系統(tǒng)多任務(wù)之間基于優(yōu)先級搶占的調(diào)度機(jī)制;
[0030]圖2為VxWorks系統(tǒng)多任務(wù)之間基于時間片輪轉(zhuǎn)的調(diào)度機(jī)制;
[0031]圖3為本發(fā)明的基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法的流程示意圖;
[0032]圖4為本發(fā)明中的方法計算定時器周期的過程;
[0033]圖5為本發(fā)明中的方法建立任務(wù)信息表的具體過程?!揪唧w實(shí)施方式】
[0034]為更好的介紹本發(fā)明所述方法,首先對VxWorks系統(tǒng)的多任務(wù)機(jī)制作簡要介紹。
[0035]Vxfforks系統(tǒng)的基本程序單元是任務(wù),多個任務(wù)可以同時執(zhí)行來共同完成程序功能。每個任務(wù)可以有多種狀態(tài),基本狀態(tài)有以下四種:就緒態(tài)(Ready),掛起態(tài)(Pend),休眠態(tài)(Sleep),延遲態(tài)(Delay)。本發(fā)明主要涉及其中的兩種狀態(tài):就緒態(tài)和掛起態(tài)。調(diào)用Vxfforks系統(tǒng)函數(shù)taskSpawnO創(chuàng)建一個任務(wù)后,該任務(wù)處于就緒態(tài),如果任務(wù)需要等待某些不可利用的資源,例如信號量等,則處于掛起態(tài)。
[0036]VxWorks系統(tǒng)的調(diào)度機(jī)制以優(yōu)先級搶占為基礎(chǔ)。在這種機(jī)制下,系統(tǒng)中的每個任務(wù)都有一個優(yōu)先級,從O?255,O為最高,255為最低。對于應(yīng)用層的任務(wù),一般使用100?250之間的優(yōu)先級。其中,優(yōu)先級高的任務(wù)可以搶占優(yōu)先級低的任務(wù)的執(zhí)行權(quán),參見附圖1 ;而在相同優(yōu)先級的多個任務(wù)之間,采用時間片輪轉(zhuǎn)調(diào)度機(jī)制,多個優(yōu)先級相同的任務(wù)按照先后順序分別執(zhí)行固定的時間,以保證每個任務(wù)都有執(zhí)行的機(jī)會,參見附圖2。
[0037]VxWorks系統(tǒng)中,多個任務(wù)之間的同步通常使用信號量作為手段來完成。如果在任務(wù)執(zhí)行過程中要求獲取信號量,則任務(wù)獲得信號量之前,處于掛起態(tài),如果其他任務(wù)或者中斷服務(wù)程序釋放了信號量則任務(wù)開始執(zhí)行。
[0038]VxWorks系統(tǒng)之所以經(jīng)常用于實(shí)時性要求高的軟件,就是因為它的定時機(jī)制很完善。在VxWorks系統(tǒng)定時機(jī)制中,tick是一項重要概念,tick為系統(tǒng)內(nèi)核調(diào)度的最小時間片,假設(shè)將系統(tǒng)的每秒tick數(shù)設(shè)置為60,則系統(tǒng)時鐘在Is中將發(fā)生60次中斷,也就是說在這種情況下,系統(tǒng)中的各任務(wù)的最小周期可以為1/60秒。
[0039]如圖3所示,本發(fā)明在實(shí)施例中的具體步驟如下:
[0040]步驟一:根據(jù)測試用例規(guī)劃測試任務(wù)。
[0041]將測試用例分解為各種基本操作(比如在某個時間點(diǎn)從某個硬件端口發(fā)送一幀特定數(shù)據(jù)),再將各種基本操作按照重要性以及操作的時間特性分配到多個測試任務(wù)中,特別的,針對要求按照一定的周期反復(fù)執(zhí)行的操作,按照周期合并到一個測試任務(wù)中。本發(fā)明中所述的測試任務(wù)是一種測試操作的集合,同時用于記錄這些測試操作的基本屬性,例如優(yōu)先級、開始時間、結(jié)束時間、任務(wù)周期等,采用類、結(jié)構(gòu)體或者類似數(shù)據(jù)結(jié)構(gòu)均可,只要能夠記錄測試任務(wù)的開始時間、優(yōu)先級等信息即可,對本發(fā)明本身的實(shí)現(xiàn)沒有影響。在本發(fā)明實(shí)施例中,采用結(jié)構(gòu)體的方式實(shí)現(xiàn),構(gòu)建結(jié)構(gòu)體STestTask。
[0042]步驟二:為各個測試任務(wù)配置屬性,包括任務(wù)名稱、任務(wù)周期、任務(wù)優(yōu)先級、開始時間、結(jié)束時間。任務(wù)周期用于表征測試任務(wù)執(zhí)行的周期,是后續(xù)步驟確定調(diào)度周期的依據(jù);在本實(shí)施例中,為結(jié)構(gòu)體STestTask增加成員task_period用于記錄任務(wù)的周期,類型為int64,以便擴(kuò)大周期的值域。
[0043]任務(wù)名稱用于區(qū)分各測試任務(wù),并且在注冊任務(wù)時使用,測試人員可以為測試任務(wù)手動命名,對于沒有手動命名的測試任務(wù),為其創(chuàng)建不會重復(fù)的名稱,在本實(shí)施例中,為結(jié)構(gòu)體STestTask增加成員task_name用于記錄測試任務(wù)的名稱,該成員類型為char[20];在測試任務(wù)結(jié)構(gòu)體實(shí)例創(chuàng)建的同時,將task_name賦值為task_i,其中i為從I開始的自然數(shù),每創(chuàng)建一個STestTask實(shí)例之前,全局計數(shù)器task_count加I,為task_name賦值時,可以直接采用task_count為i賦值。
[0044]任務(wù)優(yōu)先級用于表征各個任務(wù)的優(yōu)先級,測試人員可以根據(jù)任務(wù)的重要程度從高到低為任務(wù)分配優(yōu)先級。特別的,針對周期執(zhí)行的測試任務(wù),為保證周期小的任務(wù)能夠獲得執(zhí)行的機(jī)會,需要為周期小的任務(wù)分配比較高的優(yōu)先級。在本實(shí)施例中,為結(jié)構(gòu)體STestTask增加成員task_priority用于記錄任務(wù)的優(yōu)先級,類型為short,將任務(wù)的默認(rèn)優(yōu)先級設(shè)置為140 ;對于周期任務(wù),利用插值法分配優(yōu)先級,如果任務(wù)周期為I微秒,設(shè)置優(yōu)先級為101 ;如果任務(wù)周期為5微秒,設(shè)置優(yōu)先級為105 ;如果任務(wù)周期為10微秒,設(shè)置優(yōu)先級為110 ;如果任務(wù)周期為20微秒,設(shè)置優(yōu)先級為115,隨著任務(wù)周期的增大,優(yōu)先級的分配可以更加粗略,也就是說,周期為I微妙到周期為5微妙分配優(yōu)先級101~105,而周期為100微妙以上則幾百微妙的范圍分配5個優(yōu)先級即可。測試人員也可以手動設(shè)置重要任務(wù)的優(yōu)先級,但為保證周期小的任務(wù)可以獲得執(zhí)行的機(jī)會,應(yīng)大致保證周期小的任務(wù)得到較高的優(yōu)先級。
[0045]為結(jié)構(gòu)體STestTask增加start_time和end_time兩個成員,用于記錄測試任務(wù)的開始時間和結(jié)束時間,類型為int64。對于不需要按照周期執(zhí)行的測試任務(wù),也就是說只要在特定時間點(diǎn)執(zhí)行一次的任務(wù),將其周期和結(jié)束時間設(shè)置為與開始時間相同。對于不需要配置開始時間和結(jié)束時間的測試任務(wù),將其開始時間和結(jié)束時間設(shè)置為零;
[0046]步驟三:創(chuàng)建任務(wù)和對應(yīng)的信號量。調(diào)用VxWorks系統(tǒng)函數(shù)taskSpawn注冊任務(wù),每個測試任務(wù)對應(yīng)一個任務(wù)。taskSpawn函數(shù)的參數(shù)有name, priority, options,stackSize, entryPt, argl ~arglO,在本實(shí)施例中,將 STestTask 的 task_name 傳遞給 name作為任務(wù)的名稱J^1STestTask的task_priority傳遞給priority作為任務(wù)的優(yōu)先級;options設(shè)置為O ;stackSize設(shè)置為80000 ;entryPt設(shè)置為入口函數(shù)指針;argl~arglO設(shè)置為O。
[0047]為每個任務(wù)創(chuàng)建一個對應(yīng)的信號量用于控制任務(wù)的狀態(tài),調(diào)用VxWorks系統(tǒng)函數(shù)semBCreate O創(chuàng)建信號量,options參數(shù)設(shè)置為SEM_Q_FIF0,initialState參數(shù)設(shè)置為SEM_EMPTY。semBCreate O函數(shù)會返回一個SEM_ID類型的變量,為信號量的唯一標(biāo)識符,為STestTask增加一個SEM_ID類型的成員sem_id,用于記錄任務(wù)對應(yīng)的信號量id,以便調(diào)度機(jī)制給任務(wù)釋放信號量的時候能夠快速地獲得任務(wù)對應(yīng)的信號量。
[0048]將測試任務(wù)的實(shí)現(xiàn)寫入對應(yīng)任務(wù)的入口函數(shù),在實(shí)現(xiàn)測試任務(wù)的代碼塊之前加入獲取信號量語句,調(diào)用函數(shù)semTake,參數(shù)設(shè)置為WAIT_F0REVER。并且整個代碼塊(包括獲取信號量語句)使用while (I)循環(huán),以保證只要能夠獲取信號量,測試任務(wù)的實(shí)現(xiàn)代碼可以不停地循環(huán)執(zhí)行。由于無法獲取信號量,所有任務(wù)創(chuàng)建之后處于掛起態(tài)。
[0049]步驟四:注冊定時器用于多任務(wù)調(diào)度,定時器的周期按照各任務(wù)的最大公約數(shù)設(shè)置。如果存在任務(wù)配置了開始時間和結(jié)束時間,則將開始時間和結(jié)束時間也看做周期加入計算最大公約數(shù)的集合中,以便系統(tǒng)能夠計算出最精確的定時器周期。
[0050]在本實(shí)施例中,采用以下算法獲取定時器周期:遍歷所有任務(wù),將任務(wù)的周期、開始時間、結(jié)束時間存入一個數(shù)組中(如果為O則不存),全部任務(wù)都存完后,將數(shù)組排序并且去掉重復(fù)的值,然后取剩下值的最大公約數(shù)即為定時器周期。無論采用任何算法和結(jié)構(gòu),只要能獲取定時器周期即可滿足本發(fā)明的要求,如附圖4。
[0051]調(diào)用sysClkRateSetO函數(shù)將系統(tǒng)的每秒tick數(shù)設(shè)置為Is/定時器周期以避免浪費(fèi)多余的Cpu資源。
[0052]步驟五:建立任務(wù)信息表,將所有任務(wù)的任務(wù)ID,優(yōu)先級,周期,開始時間,結(jié)束時間以及對應(yīng)的信號量等信息記錄到表中。其中,周期,開始時間和結(jié)束時間不直接記錄時間,而是記錄tick數(shù)。具體算法為周期tick數(shù)=(int)(周期/ (1000000/sysClkRateGetO));開始時間與結(jié)束時間的計算方式類似。然后把任務(wù)信息表中的所有任務(wù)進(jìn)行排序,將所有任務(wù)按照周期從小到大進(jìn)行排序;最后再將所有周期相同的任務(wù)按照優(yōu)先級從高到低排序。具體的實(shí)現(xiàn)過程見附圖5。在本實(shí)施例中,使用數(shù)組實(shí)現(xiàn)任務(wù)信息表,其中保存STestTask結(jié)構(gòu)的實(shí)例;排序采用冒泡排序法。實(shí)現(xiàn)任務(wù)信息表也可以采用鏈表等其他結(jié)構(gòu),排序的算法也可以采用快速排序、哈希排序等多種方法,對本方法本身的實(shí)現(xiàn)沒有影響。
[0053]步驟六:測試開始運(yùn)行后,定時器自動按照各周期任務(wù)的最大公約數(shù)運(yùn)轉(zhuǎn),在定時器的回調(diào)函數(shù)中,維護(hù)一個全局的tick計數(shù)器,每次進(jìn)入回調(diào)函數(shù)將計數(shù)器加一;遍歷任務(wù)信息表,判斷所有任務(wù)是否到了應(yīng)該執(zhí)行的時刻:如果全局的tick計數(shù)大于等于任務(wù)的開始tick數(shù)并且小于等于任務(wù)的結(jié)束tick數(shù)同時全局的tick計數(shù)對任務(wù)的周期tick數(shù)取余為0,則調(diào)用semGiveO函數(shù)釋放該任務(wù)運(yùn)行所需的信號量,任務(wù)開始執(zhí)行。
[0054]本發(fā)明未詳細(xì)闡述部分屬于本領(lǐng)域公知技術(shù)。
[0055]以上所述,僅為本發(fā)明部分【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本領(lǐng)域的人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法,其特征在于實(shí)現(xiàn)步驟如下: (1)根據(jù)測試用例規(guī)劃測試任務(wù) 所述測試用例指對測試流程的描述和約束,是執(zhí)行一次測試的必要的前提和準(zhǔn)備;所述測試任務(wù)是一種測試操作的集合; (11)將測試用例分解為各種基本操作,所述基本操作是指將測試用例分解成的最小單元; (12)將步驟(11)中得到的各基本操作按照重要性以及操作的時間特性分配到多個測試任務(wù)中,所述重要性指一個基本操作是否比其他基本操作重要,如果遇到同一個時間點(diǎn)多個基本操作同時需要執(zhí)行的情況,某一個基本操作必須強(qiáng)制的先于其他基本操作運(yùn)行,則認(rèn)為該基本操作比其他基本操作重要;所述操作的時間特性是指基本操作是否存在執(zhí)行開始以及結(jié)束的時間點(diǎn)要求,是否存在需要按照一定周期反復(fù)執(zhí)行的情況;將各基本操作分配到測試任務(wù)中的原則如下:時間特性相同的操作,合并到一個測試任務(wù)中,如果存在不同的時間特性,則將基本操作放到另一個測試任務(wù)中,如果某基本操作的重要性與測試任務(wù)中的其他基本操作不同,則將該基本操作放到另一個測試任務(wù)中; (2)為各個測試任務(wù)配置任務(wù)屬性,所述任務(wù)屬性包括任務(wù)名稱、任務(wù)周期、任務(wù)優(yōu)先級、開始時間、結(jié)束時間; (21)為測試任務(wù)命名,測試人員可以對測試任務(wù)進(jìn)行手動命名,否則為測試任務(wù)分配一個不會重復(fù)的名字; (22)為測試任務(wù)設(shè)置優(yōu)先級,按照步驟(12)獲得的各基本操作的重要性關(guān)系為這些基本操作組成的測試任務(wù)設(shè)置優(yōu)先級,如果需要,測試人員可以手動修改測試任務(wù)的優(yōu)先級;針對周期執(zhí)行的測試任務(wù),為周期小的任務(wù)分配比較高的優(yōu)先級; (23)對于不需要按照周期執(zhí)行的測試任務(wù),只要在特定時間點(diǎn)執(zhí)行一次的任務(wù),將其周期和結(jié)束時間設(shè)置為與開始時間相同,對于不需要配置開始時間和結(jié)束時間和結(jié)束時間的測試任務(wù),將其開始時間和結(jié)束時間設(shè)置為零; (3)創(chuàng)建任務(wù)和任務(wù)對應(yīng)的信號量 (31)調(diào)用VxWorks系統(tǒng)函數(shù)注冊任務(wù),為每個測試任務(wù)對應(yīng)創(chuàng)建一個任務(wù),每個任務(wù)的優(yōu)先級即為測試任務(wù)的優(yōu)先級; (32)為每個任務(wù)創(chuàng)建一個對應(yīng)的信號量用于控制任務(wù)的狀態(tài); (33)將測試任務(wù)的實(shí)現(xiàn)寫入對應(yīng)任務(wù)的入口函數(shù),在實(shí)現(xiàn)測試任務(wù)的代碼塊之前加入獲取信號量語句,并且使用死循環(huán)語句使整個代碼塊循環(huán)執(zhí)行,以便保證只要能夠獲取信號量,測試任務(wù)的實(shí)現(xiàn)代碼不停地循環(huán)執(zhí)行;由于無法獲取信號量,所有任務(wù)創(chuàng)建之后處于掛起態(tài); (4)注冊定時器用于多任務(wù)調(diào)度,定時器的周期按照各任務(wù)的最大公約數(shù)設(shè)置;如果存在任務(wù)配置了開始時間和結(jié)束時間,則將開始時間和結(jié)束時間看作周期加入計算最大公約數(shù)的集合中,以便VxWorks系統(tǒng)能夠計算出最精確的定時器周期;將VxWorks系統(tǒng)的每秒tick數(shù)設(shè)置為Is/定時器周期以避免浪費(fèi)多余的CPU資源;所述tick為VxWorks系統(tǒng)內(nèi)核調(diào)度的最小時間片; (5)建立任務(wù)信息表,將所有任務(wù)的任務(wù)名稱,任務(wù)優(yōu)先級,任務(wù)周期,開始時間,結(jié)束時間以及對應(yīng)的信號量信息記錄到表中;其中,任務(wù)周期、開始時間和結(jié)束時間不直接記錄時間,而是記錄tick數(shù);然后把任務(wù)信息表中的所有任務(wù)進(jìn)行排序,將所有任務(wù)按照任務(wù)周期從小到大進(jìn)行排序;最后再將所有任務(wù)周期相同的任務(wù)按照優(yōu)先級從高到低排序; (6)測試開始運(yùn)行后,定時器自動按照各任務(wù)執(zhí)行任務(wù)周期的最大公約數(shù)運(yùn)轉(zhuǎn),在定時器的回調(diào)函數(shù)中,維護(hù)一個全局的tick計數(shù)器,每次進(jìn)入回調(diào)函數(shù)將計數(shù)器加一;遍歷任務(wù)信息表,判斷所有任務(wù)是否到了應(yīng)該執(zhí)行的時刻:如果全局的tick計數(shù)大于等于任務(wù)的開始tick數(shù)并且小于等于任務(wù)的結(jié)束tick數(shù)同時全局的tick計數(shù)對任務(wù)周期tick數(shù)取余為O,則釋放該任務(wù)運(yùn)行所需的信號量,任務(wù)開始執(zhí)行。
2.根據(jù)權(quán)利要求1所述的一種基于VxWorks系統(tǒng)多任務(wù)機(jī)制的高實(shí)時并發(fā)測試方法,其特征在于:所述步驟(5)中周期tick數(shù)的計算方法為周期tick數(shù)=周期/VxWorks系統(tǒng)調(diào)度最小時間片;所述開始時間tick數(shù)=開始時間/VxWorks系統(tǒng)調(diào)度最小時間片;結(jié)束時間tick數(shù)=結(jié)束時間/VxW orks系統(tǒng)調(diào)度最小時間片。
【文檔編號】G06F11/36GK103885881SQ201410133217
【公開日】2014年6月25日 申請日期:2014年4月3日 優(yōu)先權(quán)日:2014年4月3日
【發(fā)明者】楊順昆, 劉斌, 司維 申請人:北京航空航天大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
青冈县| 仪陇县| 水富县| 礼泉县| 班戈县| 怀远县| 大邑县| 习水县| 平潭县| 乐陵市| 拜城县| 肃南| 天峻县| 新巴尔虎右旗| 都安| 盐津县| 鸡西市| 清水县| 新竹市| 康定县| 盐亭县| 龙江县| 西安市| 汉阴县| 五大连池市| 竹溪县| 九江县| 泗阳县| 静安区| 夏津县| 襄樊市| 瑞金市| 定安县| 朔州市| 塔城市| 琼结县| 黄陵县| 博罗县| 攀枝花市| 大冶市| 商河县|