版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式系統(tǒng)及應(yīng)用第八講嵌入式實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)本節(jié)提要13254OSEK標(biāo)準(zhǔn)介紹OSEKOS標(biāo)準(zhǔn)AutoOSEK內(nèi)核設(shè)計(jì)OSEKCOM標(biāo)準(zhǔn)OSEKOIL標(biāo)準(zhǔn)1.OSEK標(biāo)準(zhǔn)介紹OSEKOSOSEKCOMOSEKNMOSEKOILOSEK/VDX是應(yīng)用在模塊和靜態(tài)實(shí)時(shí)操作系統(tǒng)上的標(biāo)準(zhǔn),由主要的汽車制造商和供應(yīng)商,研究機(jī)構(gòu)以及軟件開發(fā)商發(fā)起。OSEK,是指德國(guó)的汽車電子類開放系統(tǒng)和對(duì)應(yīng)接口標(biāo)準(zhǔn)(opensystemsandthecorrespondinginterfacesforautomotiveelectronics),而VDX則是汽車分布式執(zhí)行標(biāo)準(zhǔn)(vehicledistributedexecutive),后者最初是由法國(guó)獨(dú)自發(fā)起的,后來加入了OSEK團(tuán)體。兩者的名字都反映出OSEK/VDX的目的是為汽車電子制定標(biāo)準(zhǔn)化接口。該標(biāo)準(zhǔn)完全獨(dú)立,對(duì)目標(biāo)系統(tǒng)只限制了少量的條件。
其中OSEKOS是針對(duì)汽車應(yīng)用特點(diǎn)而專門制定的一個(gè)小型RTOS規(guī)范,著重以下幾個(gè)方面:①可移植性,所有API都是標(biāo)準(zhǔn)化的并且在功能上都有明確的定義;②可擴(kuò)展性,OSEKOS旨在通用于任何類型的ECU,因此一方面系統(tǒng)要高度的模塊化,另一方面又要能進(jìn)行靈活的配置;③汽車應(yīng)用的特定需求,諸如可靠性、實(shí)用性和代價(jià)敏感性等。相應(yīng)的,OSEKOS靜態(tài)配置可以通過OSEKOIL語言實(shí)現(xiàn),用戶在系統(tǒng)生成時(shí)靜態(tài)制定任務(wù)的個(gè)數(shù)、需要的資源和系統(tǒng)服務(wù)。OSEKCOM為通信網(wǎng)絡(luò)中的數(shù)據(jù)交換提供了標(biāo)準(zhǔn)的接口和協(xié)議。OSEKNM為監(jiān)視網(wǎng)絡(luò)的流量提供了一組標(biāo)準(zhǔn)的功能函數(shù),以保證網(wǎng)絡(luò)的安全性和可靠性。本節(jié)提要13254OSEK標(biāo)準(zhǔn)介紹OSEKOS標(biāo)準(zhǔn)AutoOSEK內(nèi)核設(shè)計(jì)OSEKCOM標(biāo)準(zhǔn)OSEKOIL標(biāo)準(zhǔn)OSEKOS標(biāo)準(zhǔn)主要包括:操作系統(tǒng)構(gòu)架任務(wù)管理應(yīng)用模式中斷處理事件機(jī)制資源管理警報(bào)消息機(jī)制錯(cuò)誤處理OSEKOS標(biāo)準(zhǔn)1.OSEK/VDX操作系統(tǒng)的構(gòu)架處理級(jí)——Processinglevels一致類——Conformanceclasses處理級(jí)OSEK操作系統(tǒng)是基于靜態(tài)優(yōu)先級(jí)的一種構(gòu)架。每個(gè)任務(wù)可以是基本任務(wù)或擴(kuò)展任務(wù),基本任務(wù)和擴(kuò)展任務(wù)的區(qū)別在于擴(kuò)展任務(wù)支持外部異步事件。每個(gè)任務(wù)被分配一個(gè)靜態(tài)優(yōu)先級(jí),調(diào)度器總是從就緒隊(duì)列中選擇最高優(yōu)先級(jí)任務(wù)。ISR可以搶占運(yùn)行任務(wù)(除了運(yùn)行任務(wù)正在使用資源)。OSEK操作系統(tǒng)提供了用戶接口,這些接口主要通過實(shí)體來使用。操作系統(tǒng)提供了兩類實(shí)體:中斷服務(wù)例程任務(wù)(基本任務(wù)和擴(kuò)展任務(wù))OSEK定義了三類處理級(jí)別:中斷級(jí)調(diào)度邏輯級(jí)任務(wù)級(jí)OSEK操作系統(tǒng)處理級(jí)優(yōu)先級(jí)規(guī)則:中斷優(yōu)先級(jí)高于任務(wù)優(yōu)先級(jí)中斷處理級(jí)由一個(gè)或多個(gè)中斷優(yōu)先級(jí)組成中斷服務(wù)例程具有指定的中斷優(yōu)先級(jí)ISR的優(yōu)先級(jí)與具體的硬件相關(guān)資源天花板優(yōu)先級(jí)與較高優(yōu)先級(jí)任務(wù)相關(guān)。任務(wù)優(yōu)先級(jí)被用戶靜態(tài)分配為了提供的不同應(yīng)用需求,操作系統(tǒng)提供了4種一致類選擇。一致類為在不改變應(yīng)用任務(wù)情況下,按照預(yù)先規(guī)定對(duì)功能較少的類到功能較多的一致類提供了升級(jí)途徑。一致類主要包括下列屬性規(guī)定:多請(qǐng)求任務(wù)激活(一個(gè)任務(wù)激活或多個(gè)任務(wù)激活)任務(wù)類型(基本任務(wù)或基本任務(wù)+擴(kuò)展任務(wù))每個(gè)優(yōu)先級(jí)對(duì)應(yīng)的任務(wù)數(shù)(一個(gè)優(yōu)先級(jí)對(duì)應(yīng)一個(gè)任務(wù)或多個(gè)任務(wù))一致類下面是一致類的定義:BCC1:每個(gè)任務(wù)只有一個(gè)激活請(qǐng)求,一個(gè)任務(wù)只有一個(gè)優(yōu)先級(jí),所有任務(wù)優(yōu)先級(jí)必須保持不同BCC2:在BCC1的基礎(chǔ)上,每個(gè)任務(wù)可以有多個(gè)激活請(qǐng)求和一個(gè)優(yōu)先級(jí)可以對(duì)應(yīng)多個(gè)任務(wù)。ECC1:在BCC1基礎(chǔ)上,增加了擴(kuò)展任務(wù),即支持事件機(jī)制。ECC2:在ECC1基礎(chǔ)上,每個(gè)任務(wù)可以有多個(gè)激活請(qǐng)求和一個(gè)優(yōu)先級(jí)可以對(duì)應(yīng)多個(gè)任務(wù)。一致類Conformanceclasses棧分開與分類BCC1:在無中斷情況下發(fā)生上下文切換僅有兩種情況被高優(yōu)先級(jí)任務(wù)搶占自己結(jié)束當(dāng)前任務(wù)高優(yōu)先級(jí)任務(wù)1高優(yōu)先級(jí)任務(wù)2被高優(yōu)先級(jí)任務(wù)搶占被高優(yōu)先級(jí)任務(wù)搶占自己結(jié)束自己結(jié)束結(jié)論:BCC1下,任務(wù)、中斷的棧的使用可以為同一個(gè),不會(huì)相互干擾,即不需要每個(gè)任務(wù)使用獨(dú)立的??臻gECC1:多了等待狀態(tài),每個(gè)就必須使用獨(dú)立的棧空間,而且為了提高任務(wù)棧大小的可估算性和使用率,將中斷統(tǒng)一使用系統(tǒng)棧。棧2.任務(wù)管理在OSEKOS中,任務(wù)提供了并發(fā)/異步執(zhí)行功能。調(diào)度器負(fù)責(zé)根據(jù)定義的調(diào)度算法調(diào)度任務(wù)。OSEKOS提供兩種任務(wù):基本任務(wù)和擴(kuò)展任務(wù)。它們不同之處在于,擴(kuò)展任務(wù)允許調(diào)用WaitEvent(),即允許擴(kuò)展任務(wù)在等待異步事件時(shí),不終止當(dāng)前例程釋放CPU。每個(gè)任務(wù)分配了一個(gè)固定的優(yōu)先級(jí)(0被分配給最低優(yōu)先級(jí)任務(wù)),可以是搶占式或非搶占式。如果是搶占式,該任務(wù)可以在任何時(shí)候被搶占,否則必須等到任務(wù)結(jié)束時(shí)才產(chǎn)生調(diào)度。一個(gè)搶占式任務(wù)可以變?yōu)榉菗屨既蝿?wù)通過使用加鎖資源RES_SCHEDULER。OSEK標(biāo)準(zhǔn)定義了4個(gè)任務(wù)狀態(tài):就緒等待掛起運(yùn)行基本任務(wù)沒有等待狀態(tài):基本任務(wù)只有在任務(wù)的開始和結(jié)束才是同步點(diǎn)。基本任務(wù)基本任務(wù)在下列三種情況下釋放CPU自己結(jié)束被高優(yōu)先級(jí)任務(wù)搶占中斷產(chǎn)生基本任務(wù)常常用來完成那些激活后就必須完整執(zhí)行的工作基本任務(wù)狀態(tài)轉(zhuǎn)換擴(kuò)展任務(wù)
擴(kuò)展任務(wù)和基本任務(wù)的主要區(qū)別在于:允許調(diào)用系統(tǒng)服務(wù)WaitEvent(),該系統(tǒng)調(diào)用使任務(wù)進(jìn)入等待狀態(tài)。等待狀態(tài)允許任務(wù)在不結(jié)束任務(wù)的情況下釋放CPU調(diào)用優(yōu)先級(jí)更低的任務(wù)運(yùn)行。擴(kuò)展任務(wù)的狀態(tài)轉(zhuǎn)換任務(wù)比較基本任務(wù)沒有等待狀態(tài),因而同步點(diǎn)在任務(wù)開始和結(jié)束的地方,所以其需要的資源少?;救蝿?wù)需求的資源必須獨(dú)享直至整個(gè)任務(wù)結(jié)束。任務(wù)實(shí)時(shí)性較差。擴(kuò)展任務(wù)的優(yōu)點(diǎn)是可以在單個(gè)任務(wù)中處理連貫的工作而不管同步請(qǐng)求是否有效。當(dāng)需求事件未產(chǎn)生時(shí)就進(jìn)入等待狀態(tài),直到事件產(chǎn)生??梢栽谌魏吸c(diǎn)進(jìn)行同步。激活一個(gè)任務(wù)操作系統(tǒng)通過系統(tǒng)調(diào)用ActivateTask或
ChainTask激活一個(gè)任務(wù)。任務(wù)被激活后從最開始狀態(tài)開始運(yùn)行。任務(wù)的多請(qǐng)求激活根據(jù)一致類的定義,一個(gè)基本任務(wù)能被激活一次或多次。任務(wù)激活的多請(qǐng)求意味著操作系統(tǒng)必須接收和記錄已經(jīng)激活的任務(wù)激活次數(shù)。任務(wù)激活請(qǐng)求次數(shù)在基本任務(wù)的屬性配置時(shí)進(jìn)行設(shè)置。如果最大的請(qǐng)求次數(shù)沒達(dá)到,請(qǐng)求被排隊(duì)。每個(gè)優(yōu)先級(jí)的基本任務(wù)的請(qǐng)求按激活順序排隊(duì)。任務(wù)切換機(jī)制操作系統(tǒng)中用于決定哪個(gè)任務(wù)應(yīng)該被啟動(dòng)的實(shí)體稱為調(diào)度器。無論任務(wù)什么時(shí)候按照調(diào)度策略進(jìn)行切換時(shí)都會(huì)調(diào)用調(diào)度器。調(diào)度器可以作為一個(gè)任務(wù)資源被任務(wù)獨(dú)享和釋放。因此一個(gè)任務(wù)可以獨(dú)占調(diào)度器直到任務(wù)完成來避免被切換。任務(wù)優(yōu)先級(jí)調(diào)度器按照任務(wù)優(yōu)先級(jí)來決定下一個(gè)將要運(yùn)行的任務(wù)。0被設(shè)計(jì)為最低優(yōu)先級(jí),一般留給空閑任務(wù)。優(yōu)先級(jí)高低和優(yōu)先級(jí)的數(shù)字相對(duì)應(yīng),數(shù)字越大,優(yōu)先級(jí)越高。動(dòng)態(tài)優(yōu)先級(jí)在OSEK中不支持,除了在使用資源時(shí),根據(jù)天花板協(xié)議,任務(wù)優(yōu)先級(jí)可動(dòng)態(tài)變?yōu)橘Y源優(yōu)先級(jí)。一個(gè)被搶占的任務(wù)優(yōu)先級(jí)被認(rèn)為是最先進(jìn)入就緒隊(duì)列的任務(wù),一個(gè)等待任務(wù)進(jìn)入就緒態(tài)被認(rèn)為是最后進(jìn)入就緒隊(duì)列的任務(wù)。調(diào)度器:就緒任務(wù)的執(zhí)行順序依據(jù)以下的準(zhǔn)則決定下一個(gè)被執(zhí)行的任務(wù):●調(diào)度器在“就緒態(tài)”隊(duì)列中搜索所有的任務(wù)?!裾{(diào)度器在處于“就緒態(tài)”的任務(wù)集中,選出優(yōu)先級(jí)最高的任務(wù)集。●調(diào)度器在上一個(gè)步驟中選出同一個(gè)優(yōu)先級(jí)的任務(wù)中找出最先進(jìn)入就緒態(tài)的任務(wù)。調(diào)度器按照任務(wù)優(yōu)先級(jí)決定下一個(gè)就緒任務(wù)進(jìn)入運(yùn)行狀態(tài)。具有相同優(yōu)先級(jí)的任務(wù)按照它們的激活順序啟動(dòng)。OSEK標(biāo)準(zhǔn)提供4種靜態(tài)優(yōu)先級(jí)調(diào)度,如下所述:全搶占調(diào)度:運(yùn)行任務(wù)可以被高優(yōu)先級(jí)任務(wù)搶占。非搶占調(diào)度:任務(wù)的切換只有通過明確的系統(tǒng)調(diào)度來實(shí)現(xiàn)。如任務(wù)結(jié)束Termination,事件觸發(fā)POSTEvent等。調(diào)度策略調(diào)度方式全搶占式調(diào)度在全搶占式調(diào)度下,用戶應(yīng)該總是期望“運(yùn)行態(tài)”任務(wù)的搶占。但是,如果希望一個(gè)任務(wù)片段不會(huì)被搶占,那么可以通過系統(tǒng)服務(wù)GetResource臨時(shí)阻塞調(diào)度器。在以下情況會(huì)出現(xiàn)重新調(diào)度:任務(wù)的成功終結(jié)TerminateTask。任務(wù)的成功終結(jié),并且成功地激活接下來要執(zhí)行的任務(wù)(ChainTask)。在任務(wù)層次激活一個(gè)任務(wù)(例如:系統(tǒng)服務(wù)ActivateTask)。如果出現(xiàn)了任務(wù)轉(zhuǎn)換為“等待態(tài)”的情況,WaitEvent會(huì)被調(diào)用。在任務(wù)層次為一個(gè)“等待態(tài)”的任務(wù)設(shè)置一個(gè)事件(例如:系統(tǒng)服務(wù)SetEvent)。在任務(wù)層次釋放資源(系統(tǒng)服務(wù)ReleaseResource)從中斷返回到任務(wù)層次。非搶占式調(diào)度非搶占式策略,就是就有通過精確定義的系統(tǒng)服務(wù)的選擇才會(huì)導(dǎo)致任務(wù)切換。非搶占式調(diào)度對(duì)任務(wù)可能的時(shí)序請(qǐng)求有著特別要求。特別地,正在運(yùn)行的低優(yōu)先級(jí)任務(wù)的不非搶占(比如,任務(wù)有一些不可分割的代碼段,或者有些不可分割的操作)會(huì)延遲一個(gè)高優(yōu)先級(jí)任務(wù)的調(diào)度,只能等到下一個(gè)調(diào)度時(shí)刻。非搶占調(diào)度在非搶占式任務(wù)的情況下,在以下的情況定會(huì)導(dǎo)致重新調(diào)度的出現(xiàn):任務(wù)順利的終止(系統(tǒng)服務(wù)TerminateTask)任務(wù)的成功終止,并且準(zhǔn)確激活接下來要執(zhí)行的任務(wù)(ChainTask)調(diào)度器的外部調(diào)用(系統(tǒng)服務(wù)Schedule)。到“等待態(tài)”轉(zhuǎn)變的發(fā)生(系統(tǒng)服務(wù)WaitEvent)?;旌险{(diào)度:由于搶占權(quán)是任務(wù)的屬性,搶占式任務(wù)和非搶占式任務(wù)在系統(tǒng)中混合使用時(shí),運(yùn)行任務(wù)的調(diào)度受到實(shí)際使用的調(diào)度策略影響。任務(wù)使用內(nèi)部資源:這種調(diào)度策略非常類似于搶占閾值技術(shù),采用天花板和內(nèi)部資源的在任務(wù)啟動(dòng)加鎖與和結(jié)束解鎖來實(shí)現(xiàn)閾值。如果在同一個(gè)系統(tǒng)上混合使用搶占式和非搶占式任務(wù),那么這個(gè)策略就叫做“混合搶占式”調(diào)度。在這種情況下,調(diào)度策略取決于運(yùn)行的任務(wù)的“搶占式屬性”。如果,正在運(yùn)行的任務(wù)是非搶占式的,那么就采取非搶占式調(diào)度;如果正在運(yùn)行的任務(wù)是搶占式的,那么就采取搶占式調(diào)度。選擇調(diào)度策略軟件開發(fā)者或者系統(tǒng)集成人員通過設(shè)置任務(wù)的優(yōu)先級(jí)和安排任務(wù)的搶占屬性,決定任務(wù)的執(zhí)行序列。一個(gè)任務(wù)的類型(基礎(chǔ)類型或者擴(kuò)展類型)和任務(wù)的調(diào)度類型(搶占式或者是非搶占式)是獨(dú)立的。一個(gè)純搶占式系統(tǒng)可能包含有基本任務(wù),而一個(gè)非搶占式系統(tǒng)可以包含擴(kuò)展任務(wù)。如果一個(gè)操作系統(tǒng)服務(wù)正在運(yùn)行,任務(wù)的搶占和任務(wù)切換都有可能延遲。很多應(yīng)用程序是由極少的執(zhí)行時(shí)間較長(zhǎng)的任務(wù)和許多定義了執(zhí)行時(shí)間的短任務(wù)組成——對(duì)于長(zhǎng)時(shí)間的任務(wù)而言,純搶占式操作系統(tǒng)較為合適;對(duì)時(shí)間較短的任務(wù)而言,采用非搶占式調(diào)度則更有效率。因此,混合式搶占式調(diào)度策略可以看作是一個(gè)折衷。在以下情況,在一個(gè)搶占式操作系統(tǒng)中定義非搶占式任務(wù)是有意義的:如果一個(gè)任務(wù)的執(zhí)行時(shí)間和該任務(wù)的切換時(shí)間是在同一個(gè)數(shù)量級(jí)上的時(shí)候;或者,RAM的使用十分經(jīng)濟(jì),為了保存任務(wù)的上下文環(huán)境;或者,該任務(wù)不應(yīng)該被搶占。結(jié)束任務(wù)在OSEK中,任務(wù)只能自己結(jié)束自己。操作系統(tǒng)提供ChainTask函數(shù)來實(shí)現(xiàn)指定的任務(wù)在結(jié)束自己后激活運(yùn)行。ChainTask使得最新被激活的任務(wù)加入優(yōu)先級(jí)隊(duì)列的最后。每個(gè)任務(wù)必須在代碼結(jié)尾通過調(diào)用TerminateTask或ChainTask結(jié)束自己。3.操作系統(tǒng)應(yīng)用模式OSEK操作系統(tǒng)提供應(yīng)用模式的支持。在實(shí)際的應(yīng)用中,一個(gè)操作系統(tǒng)可能執(zhí)行幾種互斥的應(yīng)用(比如,正常模式,廠家測(cè)試模式等)。這些應(yīng)用模式為不同運(yùn)行條件而構(gòu)建不同的軟件運(yùn)行構(gòu)架提供了的一種手段。一旦操作系統(tǒng)啟動(dòng)就不允許改變系統(tǒng)的應(yīng)用模式。每種應(yīng)用模式使用自己定義的任務(wù)、中斷、報(bào)警和定時(shí)條件和一些不同模式共享的部分。系統(tǒng)啟動(dòng)正常操作時(shí)有可能產(chǎn)生復(fù)位的情況,因此啟動(dòng)性能是在嵌入式系統(tǒng)在汽車應(yīng)用中是另一個(gè)安全指標(biāo)。例如,一個(gè)傳動(dòng)系應(yīng)用應(yīng)該能在幾微秒內(nèi)重啟整個(gè)系統(tǒng),因?yàn)橄到y(tǒng)必須安全控制發(fā)動(dòng)機(jī)氣缸中電火花。在正常情況下,應(yīng)避免長(zhǎng)時(shí)間復(fù)雜的啟動(dòng)過程。4.中斷處理標(biāo)準(zhǔn)規(guī)定操作系統(tǒng)應(yīng)該適用于不同的處理器,因此,操作系統(tǒng)的中斷處理提供一種通用處理方法,而與硬件無關(guān)。因此,在OSEK中,標(biāo)準(zhǔn)提供了兩種中斷處理:1類中斷處理此類ISR不調(diào)用操作系統(tǒng)的系統(tǒng)服務(wù)。在中斷服務(wù)例程完成后,將繼續(xù)處理中斷發(fā)生的地方的指令,例如:中斷不會(huì)影響任務(wù)的管理。此類的ISR所需要的花費(fèi)最少。中斷服務(wù)程序不用操作系統(tǒng)服務(wù)。實(shí)際上,操作系統(tǒng)不處理這類中斷,設(shè)計(jì)者可以自由編寫這類中斷處理代碼,只是不能調(diào)用系統(tǒng)服務(wù)代碼。通常這類中斷是最高優(yōu)先級(jí)中斷。2類中斷處理中斷被操作系統(tǒng)處理,因此操作系統(tǒng)服務(wù)能被中斷處理程序調(diào)用。中斷管理一類中斷服務(wù)程序二類中斷服務(wù)程序快速開啟/禁止API(應(yīng)用程序接口)功能OSEK提供了快速禁止所有中斷(EnableAllInterrupts,DisableAllInterrupts,ResumeAllInterrupts,SuspendAllInterrupts)和禁止所有第二類中斷(ResumeOSInterrupts,SuspendOSInterrupts)的功能。典型的用法是保護(hù)短暫的臨界區(qū)域。在受保護(hù)的臨界區(qū)域內(nèi)不允許中斷返回,例如:“suspend/disable”與“resume/enable”必須配對(duì)使用。中斷服務(wù)程序(ISR)可以通過以下方式和任務(wù)進(jìn)行通信:ISR激活一個(gè)任務(wù);ISR發(fā)送/接收一個(gè)非隊(duì)列消息;ISR觸發(fā)一個(gè)計(jì)數(shù)器;ISR獲取TaskID;ISR獲取任務(wù)狀態(tài);ISR設(shè)置一個(gè)事件;ISR獲取任務(wù)事件的屏蔽碼;ISR使用報(bào)警。在2類中斷中可以使用的系統(tǒng)函數(shù)注意:非屏蔽中斷(NMI)不能被分配到2類中斷。這類中斷操作系統(tǒng)不能保護(hù)其臨界區(qū)。ISRStackISR堆棧的目的是為了節(jié)省空間。當(dāng)中斷產(chǎn)生時(shí),每個(gè)任務(wù)必須設(shè)置一個(gè)足夠大的堆棧來保護(hù)任務(wù)和中斷的變量。為了避免堆??臻g的重復(fù),OSEKTurbo將ISR中的堆棧獨(dú)立出來。這類堆棧在2類中斷中使用。在BCC1中,ISR使用共用一個(gè)堆棧。在一些編譯器中通過關(guān)鍵字來產(chǎn)生堆棧構(gòu)架,如“interrupt”。5.事件機(jī)制事件機(jī)制實(shí)現(xiàn)同步的方法只支持?jǐn)U展任務(wù)可以初始化任務(wù)的轉(zhuǎn)換狀態(tài),以便轉(zhuǎn)換至等待態(tài),或者以便從等待態(tài)轉(zhuǎn)換事件機(jī)制僅在擴(kuò)展一致類中才支持。用來實(shí)現(xiàn)任務(wù)的同步和通信,可以通過2類中斷或任務(wù)來觸發(fā)。擴(kuò)展任務(wù)的典型行為是等待異步事件調(diào)用WaitEvent。在事件產(chǎn)生后,認(rèn)為可以重新調(diào)用WaitEvent來等待其它事件。事件只有當(dāng)任務(wù)處于非掛起狀態(tài)時(shí)設(shè)置。即擴(kuò)展任務(wù)不能處于掛起狀態(tài)。有多個(gè)可選項(xiàng)用于操控事件,這取決于該任務(wù)是否是該事件的擁有者,或者另外的任務(wù)是否是一個(gè)擴(kuò)展任務(wù)。所有的任務(wù)都可以為非掛起的任務(wù)設(shè)置事件。只有事件的擁有者才可以清除它自己的事件,并且等待自己的事件的設(shè)置。在任何情況之下,事件的接受者都是擴(kuò)展任務(wù)。因此,中斷服務(wù)例程和基本任務(wù)是不可能等待一個(gè)事件的。如果擴(kuò)展任務(wù)等待的事件發(fā)生了,那么該擴(kuò)展任務(wù)將會(huì)從等待態(tài)切換為就緒態(tài)。如果一個(gè)運(yùn)行態(tài)的任務(wù)在等待某事件的發(fā)生,并且該事件已經(jīng)發(fā)生了,那么該任務(wù)仍會(huì)在運(yùn)行態(tài)。搶占式擴(kuò)展任務(wù)的同步非搶占式擴(kuò)展任務(wù)的同步事件相關(guān)的函數(shù)6.資源管理
資源管理用于調(diào)整不同優(yōu)先級(jí)的任務(wù)對(duì)共享的資源的訪問,例如:管理實(shí)體(調(diào)度器)、程序片段、內(nèi)存或者硬件區(qū)域。對(duì)于所有的一致性類而言,資源管理是強(qiáng)制要求的。資源管理可以選擇性地?cái)U(kuò)展,用于協(xié)調(diào)任務(wù)和中斷服務(wù)例程的并發(fā)訪問。資源管理需要確保:兩個(gè)任務(wù)不能同時(shí)占用同一資源不能夠發(fā)生優(yōu)先權(quán)倒置在使用這些資源時(shí),不允許死鎖的發(fā)生訪問資源不允許導(dǎo)致等待態(tài)如果在中斷的層次擴(kuò)展資源管理,還必須確保兩個(gè)任務(wù)或者中斷例程不能同時(shí)占用同一資源在以下的情況中,資源管理的功能是非常有用的:搶占式任務(wù)在非搶占式任務(wù)的環(huán)境中,如果用戶計(jì)劃在其它的調(diào)度策略下,執(zhí)行應(yīng)用程序代碼在任務(wù)或者中斷服務(wù)例程之間實(shí)現(xiàn)資源共享在中斷服務(wù)例程中實(shí)現(xiàn)資源共享該標(biāo)準(zhǔn)提供能用于臨界區(qū)的二進(jìn)制資源。優(yōu)先級(jí)反轉(zhuǎn)和死鎖通過稱之為OSEK優(yōu)先級(jí)天花板協(xié)議來避免。該協(xié)議在實(shí)際上采用的靜態(tài)優(yōu)先級(jí):每個(gè)資源被分配一個(gè)天花板,它是使用該資源的所有任務(wù)(包括ISR)中最高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)。當(dāng)一個(gè)任務(wù)請(qǐng)求一個(gè)資源時(shí),他的當(dāng)前優(yōu)先級(jí)升為資源的天花板。當(dāng)任務(wù)釋放一個(gè)資源,該任務(wù)的優(yōu)先級(jí)被重新設(shè)置為資源請(qǐng)求以前的優(yōu)先級(jí)。采用該協(xié)議,優(yōu)先級(jí)反轉(zhuǎn)、鏈路阻塞、死鎖被避免。而且,由于一個(gè)任務(wù)只有所有的資源被釋放時(shí)才能被調(diào)度,因此不需要等待隊(duì)列。資源僅被任務(wù)使用。在OSEK標(biāo)準(zhǔn)中,資源可以被任務(wù)或2類中斷服務(wù)例程使用。當(dāng)一個(gè)中斷使用資源時(shí)被視為是最高優(yōu)先級(jí)任務(wù):它的執(zhí)行能被延遲當(dāng)更低優(yōu)先級(jí)中斷服務(wù)例程或任務(wù)采用天花板的高于或等于該中斷例程優(yōu)先級(jí)訪問該資源時(shí)。資源使用時(shí)的限制當(dāng)資源被占用時(shí),TerminateTask,ChainTask,Schedule,WaitEvent不能調(diào)用。使用被占用的資源的中斷服務(wù)程序?qū)⒉荒芡瓿?。?dāng)一個(gè)任務(wù)占用多個(gè)資源時(shí),應(yīng)按后進(jìn)先出(LIFO)的原則釋放資源。調(diào)度器作為資源標(biāo)準(zhǔn)還提供特殊的資源,調(diào)度器成為RES_SCHEDULER,它能使搶占不能產(chǎn)生。當(dāng)搶占式任務(wù)在處理某段程序時(shí)要求連續(xù)運(yùn)行,可以通過獲取資源RES_SCHEDULER鎖住調(diào)度器。實(shí)際上,該資源的天花板等于系統(tǒng)最高優(yōu)先級(jí)。一個(gè)非搶占任務(wù)可以認(rèn)為是使用了RES_SCHEDULER資源的任務(wù)。此時(shí),中斷同樣會(huì)被響應(yīng)和處理,但不會(huì)產(chǎn)生調(diào)度。同步機(jī)制產(chǎn)生的問題優(yōu)先級(jí)反轉(zhuǎn)死鎖外部資源:需要通過顯示調(diào)用API進(jìn)行占有優(yōu)先級(jí)置頂搶占式任務(wù)和中斷服務(wù)程序之間的資源分配
在中斷服務(wù)程序之間的資源分配內(nèi)部資源一個(gè)內(nèi)部資源是一個(gè)簡(jiǎn)單的資源,當(dāng)一個(gè)任務(wù)啟動(dòng)時(shí),它被加鎖,當(dāng)這個(gè)任務(wù)結(jié)束時(shí)才被解鎖。內(nèi)部資源的天花板可被視為任務(wù)的優(yōu)先權(quán)。內(nèi)部資源:任務(wù)一運(yùn)行就占有報(bào)警(Alarm)兩級(jí)報(bào)警報(bào)警動(dòng)作激活任務(wù)設(shè)置事件調(diào)用回調(diào)函數(shù)根據(jù)配置,當(dāng)該報(bào)警有效時(shí),回調(diào)例程被調(diào)用或任務(wù)被激活,或者一個(gè)事件被設(shè)置。在報(bào)警回調(diào)函數(shù)運(yùn)行時(shí),2類中斷被禁止。7.報(bào)警計(jì)數(shù)器一個(gè)計(jì)數(shù)器通過硬件提供的節(jié)拍來實(shí)現(xiàn)計(jì)數(shù)。OSEK不支持標(biāo)準(zhǔn)API直接操作計(jì)數(shù)器。操作系統(tǒng)關(guān)心的是怎樣管理報(bào)警。OSEK操作系統(tǒng)提供至少一個(gè)計(jì)數(shù)器(硬件或者軟件定時(shí)器)。報(bào)警管理操作系統(tǒng)在報(bào)警產(chǎn)生時(shí)提供任務(wù)激活、設(shè)置事件或調(diào)用一個(gè)報(bào)警回調(diào)例程。報(bào)警回調(diào)例程是由應(yīng)用程序提供一個(gè)簡(jiǎn)短的函數(shù)。當(dāng)與報(bào)警關(guān)聯(lián)的計(jì)數(shù)器計(jì)數(shù)達(dá)到設(shè)定值時(shí),產(chǎn)生報(bào)警??梢酝ㄟ^相對(duì)值或絕對(duì)值來設(shè)置報(bào)警關(guān)聯(lián)的計(jì)數(shù)器。報(bào)警可以定義為單次報(bào)警或周期報(bào)警。操作系統(tǒng)還提供取消報(bào)警和獲取報(bào)警值函數(shù)。報(bào)警管理的分層模型報(bào)警回調(diào)例程一個(gè)報(bào)警回調(diào)例程可以無參數(shù)或返回值?;卣{(diào)例程應(yīng)按下面格式定義:ALARMCALLBACK(AlarmCallbackRoutineName);例如:ALARMCALLBACK(BrakePedalStroke){/*doapplicationprocessing*/}8.消息消息主要用于處理器內(nèi)部和處理器之間進(jìn)行通信。OSEKCOM對(duì)消息進(jìn)行了詳細(xì)說明。本節(jié)提要13254OSEK標(biāo)準(zhǔn)介紹OSEKOS標(biāo)準(zhǔn)AutoOSEK內(nèi)核設(shè)計(jì)OSEKCOM標(biāo)準(zhǔn)OSEKOIL標(biāo)準(zhǔn)OSEKCOMOSEK標(biāo)準(zhǔn)也包含了車輛內(nèi)部通信的接口和協(xié)議的規(guī)定,稱為OSEKCOM。通信條款規(guī)定了整個(gè)車輛中兩個(gè)結(jié)點(diǎn)之間的通信和一個(gè)結(jié)點(diǎn)的內(nèi)部的通信?;舅枷胧菫閼?yīng)用層提供一個(gè)易于實(shí)現(xiàn)不同硬件之間通信的獨(dú)立于具體通信介質(zhì)的標(biāo)準(zhǔn)的通信接口。COM規(guī)范給內(nèi)部通信和外部通信定義了公共的軟件通信接口和服務(wù),這些接口和服務(wù)獨(dú)立于所采用的通信協(xié)議。通過這些,就增加了應(yīng)用程序軟件模塊的可移植性。
OSEKCOM提供了在任務(wù)間、ISR間以及任務(wù)和ISR之間傳輸數(shù)據(jù)的服務(wù)。這些任務(wù)可以在一個(gè)ECU里面也可以在不同的ECU里面。只能通過指定的API函數(shù)訪問OSEKCOM服務(wù)。這些API函數(shù)隱藏了內(nèi)部通信和外部通信的不同之處,同時(shí)也隱藏了不同的通信協(xié)議、總線系統(tǒng)和網(wǎng)絡(luò)類型。COM的概念模型OSEKCOM包括:一個(gè)交互層:為消息的傳輸提供通信服務(wù)一個(gè)網(wǎng)絡(luò)層:為不同的消息和分段傳輸提供服務(wù)。一個(gè)數(shù)據(jù)鏈路層接口:為上層不同數(shù)據(jù)包的網(wǎng)絡(luò)傳輸提供服務(wù)。OSEKCOM提供豐富的通信工具集,但許多應(yīng)用只會(huì)用到其中的一個(gè)子集。正因?yàn)榇?,該?biāo)準(zhǔn)定義了一個(gè)一致類集合,使OSEKCOM能夠按照不同的要求進(jìn)行集成,為不同的汽車供應(yīng)商提供不同集成軟件需求。OSEKCOM按照通信一致類(CCCs——CommunicationConformanceClasses)定義這些分層。一致類的主要目的是根據(jù)不同應(yīng)用需要和CPU特征定義不同功能的通信組成。OSEKCOM定義了4個(gè)通信一致類來為ECU的內(nèi)部通信到外部通信提供支持。通信一致類CCCA:CCCA定義最少的特征用于支持內(nèi)部通信。非隊(duì)列消息被支持。CCCB:CCCB定義的特征用于支持內(nèi)部通信。除了CCCA支持以外,還包括消息狀態(tài)信息和隊(duì)列消息。CCC0:CCC0定義最少的特征支持內(nèi)部通信和外部通信,所有的CCCA和2類通知,字節(jié)順序轉(zhuǎn)換,直接傳輸模式。CCC1:支持所用OSEKCOM定義的特征。消息傳送和接收模型外部接收模型外部傳送模型外部消息的傳送模式直接傳送消息根據(jù)應(yīng)用層調(diào)用直接發(fā)送。周期傳送IPDU中的消息按照設(shè)置的周期進(jìn)行傳送。混合傳送消息采用直接和周期混合模式進(jìn)行發(fā)送。OSEKCOM只支持靜態(tài)長(zhǎng)度消息,一個(gè)消息被定義成固定長(zhǎng)度,或者定義一個(gè)消息可以變化的最大長(zhǎng)度。OSEKCOM提供超時(shí)監(jiān)測(cè)(死限)機(jī)制。OSEKCOM提供過濾機(jī)制。在發(fā)送方,采用過濾算法,如果不滿足要求,IPDU數(shù)據(jù)不會(huì)被更新。在發(fā)送方,內(nèi)部消息不需要過濾。在接收方,內(nèi)部消息和外部消息都可以采用過濾。直接傳輸周期傳輸混合傳輸網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)換小端模式大端模式消息配置配置主要包括:消息傳送屬性的配置,IPDU傳輸模式的配置。消息的打包?!ackingofthemessagestoI-PDUs(seesection2.4fordetails).接收是否采用隊(duì)列及隊(duì)列的大小內(nèi)部通信-基于消息對(duì)象的進(jìn)程通信符合OSEKCOM標(biāo)準(zhǔn)的CCCA、CCCB一致類發(fā)送消息對(duì)象接受消息對(duì)象隊(duì)列接受非隊(duì)列接受消息通知機(jī)制消息通知機(jī)制提供四種通知接收通知發(fā)送通知接收錯(cuò)誤通知發(fā)送錯(cuò)誤通知接受到消息,觸發(fā)通知機(jī)制激活任務(wù)設(shè)置事件設(shè)置標(biāo)志調(diào)用回調(diào)函數(shù)通知機(jī)制消息過濾過濾主要用于判斷消息是否符合設(shè)定的發(fā)送或接收條件,如果不滿足就不發(fā)送或接收。提供非負(fù)整數(shù)的13種過濾算法,例如根據(jù)接收到的消息數(shù)據(jù)值進(jìn)行過濾根據(jù)消息數(shù)據(jù)變化趨勢(shì)進(jìn)行過濾根據(jù)消息傳輸次數(shù)進(jìn)行過濾零長(zhǎng)度和動(dòng)態(tài)長(zhǎng)度消息,沒有過濾發(fā)生死限監(jiān)測(cè)接收死限監(jiān)測(cè)必須在規(guī)定的時(shí)間間隔內(nèi)接收數(shù)據(jù),否則丟棄數(shù)據(jù)。接收死限監(jiān)測(cè)僅限于外部通信。發(fā)送死限監(jiān)測(cè)是否采用發(fā)送死限,每個(gè)消息可以根據(jù)自己要求進(jìn)行配置。本節(jié)提要13254OSEK標(biāo)準(zhǔn)介紹OSEKOS標(biāo)準(zhǔn)AutoOSEK內(nèi)核設(shè)計(jì)OSEKCOM標(biāo)準(zhǔn)OSEKOIL標(biāo)準(zhǔn)OSEKOIL標(biāo)準(zhǔn)OSDefinitionTaskDefinitionISRDefinitionResourceDefinitionEventDefinitionCounterDefinitionAlarmDefinitionMessageDefinitionApplicationModesDefinitionCOMDefinitionNMDefinitionOSEKturboPerformanceDependency配置步驟1.設(shè)計(jì)應(yīng)用程序配置情況
設(shè)計(jì)好用戶程序中需要的任務(wù)數(shù)量,任務(wù)屬性,堆棧大小,事件數(shù)量,告警數(shù)量,告警相關(guān)任務(wù),消息數(shù)量,消息相關(guān)任務(wù)和事件情況2.利用OSEKBuilder生成oil文件和gen文件夾中的c語言配置文件用OSEKBulider根據(jù)自己應(yīng)用程序情況配置相關(guān)的OIL文件。OIL文件里任務(wù)等定義順序是配置時(shí)的創(chuàng)建順序。配置步驟1.設(shè)計(jì)應(yīng)用程序配置情況 設(shè)計(jì)好用戶程序中需要的任務(wù)數(shù)量,任務(wù)屬性,堆棧大小,事件數(shù)量,告警數(shù)量,告警相關(guān)任務(wù),消息數(shù)量,消息相關(guān)任務(wù)和事件情況等配置需求。2.利用OSEKBuilder生成oil文件和gen文件夾中的c語言配置文件 用OSEKBulider根據(jù)自己應(yīng)用程序情況配置相關(guān)的OIL文件。OIL文件里任務(wù)等定義順序是配置時(shí)的創(chuàng)建順序。設(shè)計(jì)應(yīng)用程序配置情況 設(shè)計(jì)好用戶程序中需要的任務(wù)數(shù)量,任務(wù)屬性,堆棧大小,事件數(shù)量,告警數(shù)量,告警相關(guān)任務(wù),消息數(shù)量,消息相關(guān)任務(wù)和事件情況, 舉例:
8個(gè)任務(wù),名字是TASK1-TASK8,
1個(gè)事件,名字是event1
3個(gè)消息,名字是mess1-mess3
2個(gè)告警,名字是alarm1和alarm2,
1個(gè)資源,名字是res1 任務(wù)8用到告警1、事件1和任務(wù)6實(shí)現(xiàn)一個(gè)自我延時(shí),利用消息3實(shí)現(xiàn)對(duì)任務(wù)4的激活,任務(wù)4和任務(wù)5都要用到互斥訪問的資源1。
希望達(dá)到的效果是系統(tǒng)啟動(dòng)后任務(wù)8自動(dòng)就緒,在設(shè)置了一個(gè)告警,自我延時(shí)一段時(shí)間后激活任務(wù)4,并發(fā)送消息3給任務(wù)4。任務(wù)4運(yùn)行時(shí)能使用互斥資源res1,之后任務(wù)5被激活并也使用資源res1,兩者之間能互斥訪問資源不會(huì)發(fā)生優(yōu)先級(jí)翻轉(zhuǎn)現(xiàn)象。最后回到任務(wù)8,重復(fù)上述流程循環(huán)。設(shè)計(jì)應(yīng)用程序配置情況TASK8TASK6TASK4TASK5event1mess3alarm1res1OIL文件結(jié)構(gòu)單CPU配置的oil文件基本模式必須遵循以下結(jié)構(gòu)。OIL_VERSION=<version>;oil版本IMPLEMENTATION<name> { <OBJECT_TYPE>{//Implementationdefinition ...listofimplementationspecificobjectattributes... }; ... };執(zhí)行模式標(biāo)準(zhǔn),即配置對(duì)象的模式定義CPU<name> {<OBJECT_TYPE><object_name>//DefinitionoftheapplicationonCPU {//Systemobjectdefinition <ATTRIBUTE>=<value>; <REFERENCE>=<object_name>; ...listofobjectattributesandreferences... }; ...listofobjects... };具體配置對(duì)象的配置描述列表配置對(duì)象的語法結(jié)構(gòu)所有的對(duì)象都用同樣的語法結(jié)構(gòu). 如下所示: <object_type><object_name> { <property_definitions> };OSDefinitionOS對(duì)象描述一個(gè)操作系統(tǒng)的配置。該類對(duì)象類型用關(guān)鍵字OS來定義,一個(gè)配置應(yīng)用中只能有一個(gè)OS對(duì)象。OS對(duì)象的語法結(jié)構(gòu)如下所示:OS<name>{ <attributes> };OS定義——全局屬性STATUS=<STANDARD/EXTENDED>; OS的調(diào)式狀態(tài)CC=<BCC1/ECC1/AUTO>; OSEK的一致類定義DEBUG_LEVEL=<0/1/2/4>; OS中對(duì)ORTI的支持情況BuildNumber=<TRUE/FALSE>; 編譯ASCII型Number是否編進(jìn)OS的二進(jìn)制鏡像文件(ROM代碼)MessageCopyAllocation=<USER/OS>; 由SG默認(rèn)指定或由用戶指定的消息拷貝ResourceScheduler=<TRUE/FALSE>; 是否將調(diào)度器作為資源GlobalSystemAttributesSTATUS(ENUM),CC(ENUMorAUTO),……OS調(diào)試狀態(tài)的標(biāo)準(zhǔn)屬性,一致類型等EXTENDED,ECC1,……CPURelatedAttributesTargetMCU,HCBasePage,……相關(guān)于硬件的屬性S12DP256,……StackRelatedAttributesIsrStackSize,……系統(tǒng)中棧支持情況integerTaskRelatedAttributeTimeScale,ScalePeriod,……操作系統(tǒng)中的任務(wù)屬性TRUE/FALSEInterruptRelatedPropertiesUnorderedException,……ISR執(zhí)行的參數(shù)定義TRUE/FALSEHookRoutinesRelatedAttributeSTARUPHOOK系統(tǒng)啟動(dòng)回調(diào)函數(shù)TRUE/FALSESHUTDOWNHOOK系統(tǒng)關(guān)閉回調(diào)函數(shù)TRUE/FALSEPRETASKHOOK進(jìn)入任務(wù)上下文前回調(diào)函數(shù)TRUE/FALSEPOSTTASKHOOK退出任務(wù)上下文后回調(diào)函數(shù)TRUE/FALSEERRORHOOK當(dāng)返回狀態(tài)不為E_OK時(shí)的回調(diào)函數(shù)TRUE/FALSEUSEGETSERVICEID獲得錯(cuò)誤回調(diào)函數(shù)中服務(wù)號(hào)的函數(shù)TRUE/FALSEUSEPARAMETERACCESS獲得錯(cuò)誤回調(diào)函數(shù)中上下文信息的函數(shù)TRUE/FALSEIdleLoopHOOK空閑任務(wù)回調(diào)函數(shù)TRUE/FALSEOS對(duì)象屬性O(shè)S{ ENUM[STANDARD,EXTENDED]STATUS; BOOLEANSTARTUPHOOK; BOOLEANERRORHOOK; BOOLEANSHUTDOWNHOOK; BOOLEANPRETASKHOOK; BOOLEANPOSTTASKHOOK; BOOLEANUSEGETSERVICEID; BOOLEANUSEPARAMETERACCESS; BOOLEANUSERESSCHEDULER=TRUE;};OSEKBuilder中名字為OS的OS對(duì)象標(biāo)志為點(diǎn)擊或在OILObject窗口右鍵添加OS對(duì)象雙擊屬性關(guān)鍵字,在彈出的EditValue窗口中輸入該屬性的參數(shù)值或?qū)傩灾礝SEKBuilder——OSTaskDefinitionOIL中一個(gè)任務(wù)對(duì)象描述一個(gè)任務(wù)的配置定義通過屬性參數(shù)的配置實(shí)現(xiàn)任務(wù)對(duì)象和系統(tǒng)的其他對(duì)象之間的間接連接。該類對(duì)象類型用關(guān)鍵字TASK來定義TASK對(duì)象的語法結(jié)構(gòu)如下所示: TASK<nameofTASK>{ PRIORITY=<integer>; SCHEDULE=<FULL/NON>; AUTOSTART=<TRUE/FALSE>{APPMODE=<nameofAPPMODE>;}; ACTIVATION=<1>; STACKSIZE=<integer>; RESOURCE=<nameofRESOURCE>; EVENT=<nameofEVENT>; ACCESSOR=<SENT/RECEIVED>{MESSAGE=<nameofMESSAGE>; WITHOUTCOPY=<TRUE/FALSE>; ACCESSNAME=<string>;}; };PRIORITY0~63優(yōu)先級(jí)大小SCHEDULEFULL/NON任務(wù)調(diào)度方式AUTOSTARTRUE/FALSE自動(dòng)調(diào)用模式APPMODEName應(yīng)用模式ACTIVATION1激活狀態(tài)RESOURCEName任務(wù)中使用的資源ACCESSORSENT/RECEIVE消息使用模式EVENTname任務(wù)中運(yùn)行的事件STACKSIZEinteger任務(wù)堆棧大小MESSAGEname任務(wù)發(fā)送或接受的消息WITHOUTCOPYTRUE/FALSE是否允許消息復(fù)制ACCESSNAMEstring消息數(shù)據(jù)參數(shù)定義包括message,event,withoutcopy三項(xiàng)Task對(duì)象屬性TASK{ BOOLEAN[ TRUE{ APPMODE_TYPEAPPMODE[]; }, FALSE ]AUTOSTART; UINT32PRIORITY; UINT32ACTIVATION; ENUM[NON,FULL]SCHEDULE; EVENT_TYPEEVENT[]; RESOURCE_TYPERESOURCE[]; MESSAGE_TYPEMESSAGE[];};Task對(duì)象屬性TASKnamePriorityScheduleAutostartAppmodeActivationStacksizeResourceEventAccessorAccessnameWithoutcopyMessage指針OSEKBuilder中名字為TASK8的TASK對(duì)象標(biāo)志為點(diǎn)擊或在OILObject窗口右鍵添加TASK對(duì)象雙擊屬性關(guān)鍵字,在彈出的EditValue窗口中輸入該屬性的參數(shù)值或?qū)傩灾礝SEKBuilder——TASKISRDefinition該類對(duì)象類型用關(guān)鍵字ISR來定義,對(duì)應(yīng)同名的中斷程序配置。ISR對(duì)象的語法結(jié)構(gòu)如下所示:ISR<nameofISR>{ CATEGORY=<1/2>; PRIORITY=0; RESOURCE=<nameofRESOURCE>; ACCESSOR=<SENT/RECEIVED>{ MESSAGE=<nameofMESSAGE>; ACCESSNAME=<string>; }; };ISR對(duì)象屬性CATEGORY1,2中斷類型RESOURCEnameACCESSORSENT/RECEIVED訪問器MESSAGEnameACCESSNAMEstringPRIORITY0ISR{ UINT32[1,2]CATEGORY; RESOURCE_TYPERESOURCE[]; MESSAGE_TYPEMESSAGE[];};ISR對(duì)象默認(rèn)屬性標(biāo)準(zhǔn)ISRnameCATEGORYRESOURCEACCESSORMESSAGEPRIORITYACCESSNAMEOSEKBuilder中名字為isr1的ISR對(duì)象標(biāo)志為點(diǎn)擊或在OILObject窗口右鍵添加ISR對(duì)象雙擊屬性關(guān)鍵字,在彈出的EditValue窗口中輸入該屬性的參數(shù)值或?qū)傩灾礝SEKBuilder——ISRResourceDefinition該類對(duì)象類型用關(guān)鍵字RESOURCE來定義。天花板協(xié)議根據(jù)相關(guān)資源的任務(wù)優(yōu)先級(jí)信息配置時(shí)自動(dòng)被執(zhí)行。RESOURCE對(duì)象的語法結(jié)構(gòu)如下所示:
RESOURCE<nameofresource>{ RESOURCEPROPERTY=<STANDARD /LINKED /INTERNAL>{ LINKEDRESOURCE=<nameofRESOURCE> }; };Resource對(duì)象默認(rèn)屬性標(biāo)準(zhǔn)RESEOURCEnameRESOURCEPROPERTYLINKEDRESOURCERESOURCEsci_res { RESOURCEPROPERTY=STANDARD; };OSEKBuilder中名字為res1的RESOURCE對(duì)象標(biāo)志為點(diǎn)擊或在OILObject窗口右鍵添加RESOURCE對(duì)象雙擊屬性關(guān)鍵字,在彈出的EditValue窗口中輸入該屬性的參數(shù)值或?qū)傩灾礝SEKBuilder——ResourceEventDefinition該類對(duì)象類型用關(guān)鍵字EVENT來定義。事件對(duì)象沒有參數(shù)。事件對(duì)象的語法結(jié)構(gòu)如下所示:
EVENT<nameofEVENT>{ MASK=<integer/AUTO>; };Event對(duì)象默認(rèn)屬性標(biāo)準(zhǔn)EVENTnameMASK EVENTdelay_expire { MASK=AUTO; };OSEKBuilder中名字為event1的EVENT對(duì)象標(biāo)志為點(diǎn)擊或在OILObject窗口右鍵添加Event對(duì)象雙擊屬性關(guān)鍵字,在彈出的EditValue窗口中輸入該屬性的參數(shù)值或?qū)傩灾礝SEKBuilder——EventCounterDefinitionCOUNTER對(duì)象描述OSEK系統(tǒng)的時(shí)鐘配置。沒有參數(shù)的該類對(duì)象被其他的對(duì)象引用。該類對(duì)象類型用關(guān)鍵字COUNTER來定義。時(shí)鐘對(duì)象的語法結(jié)構(gòu)如下所示:
COUNTER<nameofCOUNTER>{ MINCYCLE=<integer>; MAXALLOWEDVALUE=<integer>; TICKSPERBASE=<integer>; }MINCYCLEinteger一個(gè)報(bào)警周期所允許的最小計(jì)數(shù)范圍MAXALLOWEDVALUEinteger定義計(jì)數(shù)的最大數(shù)目TICKSPERBASEinteger時(shí)鐘計(jì)數(shù)需要達(dá)到的一個(gè)基準(zhǔn)值Counter對(duì)象屬性COUNTERnameMINCYCLEMAXALLOWEDVALUETICKSPERBASECOUNTER{ UINT32MINCYCLE; UINT32MAXALLOWEDVALUE; UINT32TICKSPERBASE;};Counter對(duì)象屬性O(shè)SEKBuilder中名字為counter1的COUNTER對(duì)象標(biāo)志為點(diǎn)擊或在OILObject窗口右鍵添加COUNTER對(duì)象雙擊屬性關(guān)鍵字,在彈出的EditValue窗口中輸入該屬性的參數(shù)值或?qū)傩灾礝SEKBuilder——CounterAlarmDefinition該對(duì)象描述告警的配置,通過屬性參數(shù)的配置實(shí)現(xiàn)告警對(duì)象和系統(tǒng)的其他對(duì)象之間的間接連接。告警對(duì)象引用的任務(wù)和時(shí)鐘必須已經(jīng)定義過。該類對(duì)象類型用關(guān)鍵字ALARM來定義告警對(duì)象的語法結(jié)構(gòu)如下所示: ALARM<nameofALARM>{ COUNTER=<nameofCOUNTER>; ACTION=<SETEVENT/ACTIVATETASK/ALARMCALLBACK>{ TASK=<nameofTASK>; EVENT=<nameofEVENT>; ALARMCALLBACKNAME=<string>; }; AUTOSTART=<TRUE/FALSE>{ALARMTIME=<integer>; CYCLETIME=<integer>; APPMODE=<nameofAPPMODE>;}; };ALARM對(duì)象屬性COUNTERname設(shè)置計(jì)數(shù)器的名字ACTIONACTIVATETASK,SETEVENT,ALARMCALLBACK定義報(bào)警超時(shí)時(shí)通知的方式.即警報(bào)動(dòng)作TASKname當(dāng)報(bào)警超時(shí)時(shí)通過激活或設(shè)置事件通知任務(wù)EVENTname只有當(dāng)ACTION為SETEVENT,報(bào)警超時(shí)時(shí)才能設(shè)置事件ALARMCALLBACKNAMEstring當(dāng)報(bào)警超時(shí)時(shí)回調(diào)常規(guī)的名字。AUTOSTARTTRUE/FALSE報(bào)警在系統(tǒng)啟動(dòng)時(shí)的是否自動(dòng)開啟ALARMTIMEinteger定義報(bào)警shall的超時(shí)時(shí)間CYCLETIMEinteger定義報(bào)警周期時(shí)間APPMODEname定義報(bào)警在系統(tǒng)自動(dòng)啟動(dòng)的應(yīng)用模式ALARM{ COUNTER_TYPECOUNTER; ENUM[ ACTIVATETASK{TASK_TYPETASK;}, SETEVENT{ TASK_TYPETASK; EVENT_TYPEEVENT; } ALARMCALLBACK{ STRINGALARMCALLBACKNAME; } ]ACTION; BOOLEAN[ TRUE{ UINT32ALARMTIME; UINT32CYCLETIME; APPMODE_TYPEAPPMODE[]; }, FALSE ]AUTOSTART; };ALARMnameCOUNTERACTIONALARMCALLBACKNAMEEVENTTASKAUTOSTARTAPPMODECYCLETIMEALARMTIMEALARM對(duì)象屬性O(shè)SEKBuilder中名字為alarm1的ALARM對(duì)象標(biāo)志為點(diǎn)擊或在OILObject窗口右鍵添加ALARM對(duì)象雙擊屬性關(guān)鍵字,在彈出的EditValue窗口中輸入該屬性的參數(shù)值或?qū)傩灾礝SEKBuilder——AlarmMessageDefinition該對(duì)象描述消息的配置,通過屬性參數(shù)的配置實(shí)現(xiàn)告警對(duì)象和系統(tǒng)的其他對(duì)象之間的間接連接。消息對(duì)象的隊(duì)列和非隊(duì)列屬性互斥,不能同時(shí)具備隊(duì)列和非隊(duì)列兩種屬性。該類對(duì)象類型用關(guān)鍵字MESSAGE來定義資源對(duì)象的語法結(jié)構(gòu)如下所示: MESSAGE<nameofMESSAGE>{ TYPE=<QUEUED/UNQUEUED>; QUEUEDEPTH=<integer>; CDATATYPE=<string>; ACTION=<ACTIVATETASK/SETEVENT/CALLBACK/FLAG/NONE>{ TASK=<nameofTASK>; EVENT=<nameofEVENT>; CALLBACKNAME=<string>; FLAGNAME=<string>; }; };TYPEQUEUED,UNQUEUED消息類型QUEUEDEPTHinteger消息隊(duì)列CDATATYPEstring消息項(xiàng)的數(shù)據(jù)類型ACTIONACTIVATETASK,SETEVENT,CALLBACK,FLAG,NONE消息到達(dá)時(shí),任務(wù)通知的方式TASKname只能定義為激活、/設(shè)置事件EVENTname消息到達(dá)時(shí),事件格式當(dāng)ACTION是SETEVENT,這項(xiàng)必須定義CALLBACKNAMEstring當(dāng)消息發(fā)送時(shí),激活的函數(shù)名字,當(dāng)ACTION是CALLBACK時(shí)必須定義FLAGNAMEstring當(dāng)消息發(fā)送時(shí)的標(biāo)志名字,當(dāng)ACTION是FLAG時(shí)必須定義Message對(duì)象屬性Message對(duì)象屬性MESSAGEnameTYPEQUEUEDEPTHCDATATYPEACTIONCALLBACKNAMEEVENTTASKFLAGNAMEMESSAGEmess_w{TYPE=UNQUEUED;CDATATYPE="Wheel_w";ACTION=SETEVENT {TASK=Lg;EVENT=tras_w; };};OSEKBuilder中名字為mess1的MESSAGE對(duì)象標(biāo)志為點(diǎn)擊或在OILObject窗口右鍵添加MESSAGE對(duì)象雙擊屬性關(guān)鍵字,在彈出的EditV
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州省六盤水市2025屆高三第二次診斷性監(jiān)測(cè)考試語文試題
- 感恩同行青春追夢(mèng)
- 2025年全球及中國(guó)升降式傳遞窗行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球沖壓飛輪行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)天窗玻璃更換和維修行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)量子信息系統(tǒng)服務(wù)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 數(shù)字化工作空間與創(chuàng)新園區(qū)的未來展望
- 二零二五年度出租房水電費(fèi)分時(shí)電價(jià)執(zhí)行合同4篇
- 現(xiàn)代科技環(huán)境下小學(xué)科學(xué)教師如何變革其職能
- 科技驅(qū)動(dòng)下的學(xué)校德育工作革新之路
- 電氣工程及其自動(dòng)化專業(yè)《畢業(yè)設(shè)計(jì)(論文)及答辯》教學(xué)大綱
- 《客艙安全管理與應(yīng)急處置》課件-第14講 應(yīng)急撤離
- 中華人民共和國(guó)文物保護(hù)法
- 2025屆高考作文押題預(yù)測(cè)5篇
- 節(jié)前物業(yè)安全培訓(xùn)
- 一年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)集錦
- 阿里巴巴國(guó)際站:2024年珠寶眼鏡手表及配飾行業(yè)報(bào)告
- 高甘油三酯血癥相關(guān)的器官損傷
- 手術(shù)室護(hù)士考試題及答案
- 牙膏項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 單位食堂供餐方案
評(píng)論
0/150
提交評(píng)論