當(dāng)前位置:首頁(yè) > 電源 > 數(shù)字電源
[導(dǎo)讀]摘要 介紹了基于OSEK/VDX標(biāo)準(zhǔn)的開(kāi)源嵌入式實(shí)時(shí)操作系統(tǒng)Trampoline,詳細(xì)分析了該操作系統(tǒng)內(nèi)核調(diào)度、任務(wù)管理和中斷管理的實(shí)現(xiàn)機(jī)制,并指出了Trampoline為實(shí)現(xiàn)高可移植性、小內(nèi)存的設(shè)計(jì)目標(biāo)時(shí)對(duì)0SEK任務(wù)管理和中斷管

摘要 介紹了基于OSEK/VDX標(biāo)準(zhǔn)的開(kāi)源嵌入式實(shí)時(shí)操作系統(tǒng)Trampoline,詳細(xì)分析了該操作系統(tǒng)內(nèi)核調(diào)度、任務(wù)管理和中斷管理的實(shí)現(xiàn)機(jī)制,并指出了Trampoline為實(shí)現(xiàn)高可移植性、小內(nèi)存的設(shè)計(jì)目標(biāo)時(shí)對(duì)0SEK任務(wù)管理和中斷管理所作的優(yōu)化。最后,給出了在Linux/x86平臺(tái)上使用Trampoline開(kāi)發(fā)應(yīng)用程序的方法。
關(guān)鍵詞 OSEK/VDX Trampoline 任務(wù)調(diào)度 任務(wù)管理 中斷管理


1 OSEK操作系統(tǒng)研究現(xiàn)狀及相關(guān)工作
    OSEK/VDX標(biāo)準(zhǔn)產(chǎn)生以后,很多操作系統(tǒng)供應(yīng)商對(duì)其進(jìn)行研究,并實(shí)現(xiàn)了商業(yè)化,例如國(guó)外Elektrobit Auto—motive、 Accelerated Techno1ogy、 dSPACE、 ETAS、Metrowerks、Hitex、iSYSTEM、Lauterbach Datentechnik、Vector、WindRiver等公司。這些公司的OSEK操作系統(tǒng)產(chǎn)品都通過(guò)了OSEK官方認(rèn)證,并提供了配套的集成開(kāi)發(fā)環(huán)境來(lái)方便應(yīng)用程序的開(kāi)發(fā)。
    國(guó)內(nèi)依據(jù)0SEK/VDX開(kāi)發(fā)的操作系統(tǒng)內(nèi)核,大部分參考了μC/OS操作系統(tǒng)內(nèi)核的設(shè)計(jì)或者是在它的基礎(chǔ)上修改的,也有在Linux的基礎(chǔ)上修改的。國(guó)內(nèi)OSEK操作系統(tǒng)配套的集成開(kāi)發(fā)環(huán)境很少,目前有浙江大學(xué)開(kāi)發(fā)的SmartIDE、清華大學(xué)開(kāi)發(fā)的清華車(chē)用集成開(kāi)發(fā)環(huán)境等,其他的基本上沒(méi)有配套的集成開(kāi)發(fā)環(huán)境。因此目前國(guó)內(nèi)對(duì)OSEK標(biāo)準(zhǔn)的研究和應(yīng)用還處于初級(jí)階段。
    由于購(gòu)買(mǎi)商業(yè)化的OSEK需要大量資金,并且很多時(shí)候不能獲取源代碼,因此希望有一些開(kāi)源OSEK操作系統(tǒng)來(lái)滿足研究的需要?,F(xiàn)有的OSEK操作系統(tǒng)的開(kāi)源實(shí)現(xiàn),有PICosl8,一個(gè)OSEK/VDX OS 2.1r1的部分實(shí)現(xiàn)。它專(zhuān)門(mén)為PICl8XXX系列微控制器設(shè)計(jì),針對(duì)該系列微控制器硬件,特別是在內(nèi)存使用方面作了高度優(yōu)化。但是,它的定制能力很差,并且移植到其他平臺(tái)時(shí)代碼修改量很大。另外還有openOSEK項(xiàng)目,但是該項(xiàng)目一直沒(méi)有開(kāi)發(fā)出正式發(fā)布的版本。
    Trampoline主要是由法國(guó)通信研究所(IRCCyN)的實(shí)時(shí)系統(tǒng)組負(fù)責(zé)開(kāi)發(fā)的。它的源代碼是開(kāi)放的,能夠兼容OSEK/VDX OS 2.2.3標(biāo)準(zhǔn)(當(dāng)前最新版本為1.1)。它目前還沒(méi)有通過(guò)OSEK/VDX的官方認(rèn)證,因此只能說(shuō)它兼容OSEK標(biāo)準(zhǔn),而不能說(shuō)它是通過(guò)OSEK認(rèn)證的操作系統(tǒng)。Trampoline目前能夠在4個(gè)平臺(tái)上運(yùn)行,分別是POSIX(包括Linux、Unix、Mac OS等)系列操作系統(tǒng)平臺(tái)、Infineon C166平臺(tái)、Freescale S12x平臺(tái)、Darwin/PowerPC平臺(tái),其中在POSIX系列操作系統(tǒng)上運(yùn)行時(shí)需要libpcl庫(kù)的支持。因此,即使沒(méi)有微控制器,也可以在常見(jiàn)的Linux/x86平臺(tái)上使用Trampoline。
    要對(duì)整個(gè)OSEK/VDX標(biāo)準(zhǔn)進(jìn)行研究,對(duì)OSEK操作系統(tǒng)的研究是基礎(chǔ)。只有有了一個(gè)可以使用的OSEK操作系統(tǒng),才能在它的基礎(chǔ)上進(jìn)行COM、NM及OIL標(biāo)準(zhǔn)的研究,才能進(jìn)行OSEK操作系統(tǒng)應(yīng)用程序開(kāi)發(fā)、汽車(chē)電子集成開(kāi)發(fā)環(huán)境的開(kāi)發(fā)等方面的研究。Trampoline能夠在Linux平臺(tái)上運(yùn)行,并且有一個(gè)可用的GOIL OIL文件解析器,可以作為進(jìn)行OSEK/VDX標(biāo)準(zhǔn)研究的基礎(chǔ)。


2 OSEK OS及Trampoline分析
    OSEK操作系統(tǒng)是一種單處理器操作系統(tǒng),主要用于汽車(chē)電子的分布電子控制單元ECU(Electronic ControlUnit)上。
    OSEK操作系統(tǒng)對(duì)不同版本OSEK操作系統(tǒng)提供的應(yīng)用程序接口進(jìn)行了標(biāo)準(zhǔn)化,這樣,為一個(gè)OSEK操作系統(tǒng)設(shè)計(jì)的應(yīng)用程序不用修改就可以移植到其他OSEK操作系統(tǒng)上運(yùn)行。
    為了使OSEK操作系統(tǒng)能夠在有不同計(jì)算能力(不同CPU、不同存儲(chǔ)容量)的ECU上運(yùn)行,OSEK定義了4個(gè)符合類(lèi),分別是BCCl、ECCl、BCC2、ECC2。每一個(gè)符合類(lèi)包括一組操作系統(tǒng)特性,代表一類(lèi)應(yīng)用程序的需求,也包含了這些操作系統(tǒng)特性運(yùn)行所需要的硬件需求。使用符合類(lèi)的概念既方便用戶根據(jù)自己的需求及自己的硬件條件來(lái)選擇符合自己需要的操作系統(tǒng)特性集合,也使得操作系統(tǒng)供應(yīng)商可以先提供一部分操作系統(tǒng),也就是先提供對(duì)部分符合類(lèi)的支持,然后再增加更多操作系統(tǒng)特性,支持其他符合類(lèi),從而方便了操作系統(tǒng)的開(kāi)發(fā)。
    OSEK操作系統(tǒng)是靜態(tài)配置的,而不是動(dòng)態(tài)生成的,用戶在系統(tǒng)生成階段能夠使用OIL語(yǔ)言對(duì)系統(tǒng)進(jìn)行配置,指定系統(tǒng)里使用多少個(gè)任務(wù)、使用哪些資源、需要調(diào)用哪些系統(tǒng)服務(wù)等。通過(guò)這種方式,用戶可以選擇需要的部分,裁剪掉不需要的,以減少不必要的系統(tǒng)資源。另外,由于系統(tǒng)是靜態(tài)生成的,既減少了動(dòng)態(tài)生成系統(tǒng)對(duì)象的開(kāi)銷(xiāo),減少系統(tǒng)內(nèi)存的使用,又可以使系統(tǒng)運(yùn)行時(shí)的行為可預(yù)知,提高系統(tǒng)的可靠性和確定性。
    由于OSEK操作系統(tǒng)是靜態(tài)生成的,系統(tǒng)運(yùn)行時(shí)的很多信息在系統(tǒng)生成階段就可以確定,于是它提供的任務(wù)間同步和通信方法比其他常用的嵌入式實(shí)時(shí)操作系統(tǒng)要少。它用OSEK PCP(Priority Ceiling Protoco1)協(xié)議來(lái)同步資源的并發(fā)訪問(wèn),從而提供了任務(wù)與ISR之間及ISR與ISR之間共享資源的機(jī)制。另外,OSEK操作系統(tǒng)還提供了完善的錯(cuò)誤處理機(jī)制,提高了系統(tǒng)的可靠性和容錯(cuò)能力。[!--empirenews.page--]
    Trampoline完全支持OSEK標(biāo)準(zhǔn)要求,實(shí)現(xiàn)了OSEK操作系統(tǒng)統(tǒng)一的API接口,支持靜態(tài)配置,支持4個(gè)符合類(lèi),支持OSEK PCP協(xié)議。另外,Trampoline的設(shè)計(jì)還考慮到兩個(gè)方面——高可移植性和減少內(nèi)存使用量。
    為了達(dá)到高可移植性,Trampoline設(shè)計(jì)了一個(gè)硬件抽象層來(lái)隔離底層的硬件差異,把平臺(tái)有關(guān)的代碼與平臺(tái)無(wú)關(guān)的代碼進(jìn)行隔離。把Trampoline從一個(gè)目標(biāo)平臺(tái)移植到另一個(gè)目標(biāo)平臺(tái),僅需要把與目標(biāo)平臺(tái)有關(guān)的那部分代碼改寫(xiě)一下就可以了,硬件抽象層之上的那部分不用修改,這大大減少了操作系統(tǒng)移植的工作量。在Trampoline代碼的組織中,不同目標(biāo)平臺(tái)代碼放在不同的文件中,分離得很清楚。與目標(biāo)平臺(tái)有關(guān)的代碼,僅僅是任務(wù)上下文切換、操作系統(tǒng)初始化及一些與硬件相關(guān)的函數(shù)(中斷使能、睡眠模式等)代碼。這部分代碼量減到了最少。由于車(chē)載嵌入式系統(tǒng)中的微控制器RAM容量很小,一般從幾百字節(jié)到幾K字節(jié),而增加RAM容量會(huì)增加產(chǎn)品的成本,在產(chǎn)品批量生產(chǎn)時(shí)往往會(huì)難以接受。Trampo—line在設(shè)計(jì)時(shí)盡量減少內(nèi)存的使用,并優(yōu)化了任務(wù)管理和中斷管理的數(shù)據(jù)結(jié)構(gòu),把一部分不變的內(nèi)容放到ROM中,以減少RAM的使用要求。
    下面著重分析Trampoline最核心的調(diào)度機(jī)制、任務(wù)管理、中斷管理的設(shè)計(jì)與實(shí)現(xiàn)。
2.1 調(diào)度機(jī)制
    Trampoline使用靜態(tài)優(yōu)先級(jí)調(diào)度算法。在系統(tǒng)生成階段,用戶為每一個(gè)任務(wù)分配一個(gè)優(yōu)先級(jí)。在不同的符合類(lèi)下,優(yōu)先級(jí)與任務(wù)的對(duì)應(yīng)關(guān)系不同。在BCCl和ECCl符合類(lèi)下,一個(gè)優(yōu)先級(jí)僅對(duì)應(yīng)一個(gè)任務(wù),不同的任務(wù)有不同的優(yōu)先級(jí),任務(wù)之間不能共享優(yōu)先級(jí);而在BCC2和ECC2符合類(lèi)下,一個(gè)優(yōu)先級(jí)可以對(duì)應(yīng)多個(gè)任務(wù),不同的任務(wù)可以共享同一個(gè)優(yōu)先級(jí)。任務(wù)有4種狀態(tài):就緒狀態(tài)、等待狀態(tài)、掛起狀態(tài)(僅ECCl和ECC2符合類(lèi)下有)及運(yùn)行狀態(tài)。
    由于使用處于等待或者掛起狀態(tài)的任務(wù)時(shí)直接給出了該任務(wù)結(jié)構(gòu),因此Trampoline沒(méi)有使用數(shù)據(jù)結(jié)構(gòu)來(lái)管理等待狀態(tài)和掛起狀態(tài)的任務(wù);而對(duì)于就緒狀態(tài)的任務(wù),在不同的符合類(lèi)下,Trampoline采用了兩種不同的數(shù)據(jù)結(jié)構(gòu)來(lái)管理。由于在BCCl和ECCl符合類(lèi)下不同的任務(wù)有不同的優(yōu)先級(jí),Trampoline使用一個(gè)簡(jiǎn)單的鏈表,按照任務(wù)的優(yōu)先級(jí)由高到低把就緒態(tài)任務(wù)描述符給連接起來(lái);而在BCC2和ECC2符合類(lèi)下,幾個(gè)任務(wù)可以共享一個(gè)優(yōu)先級(jí),Trampoline使用了一個(gè)任務(wù)子集鏈表數(shù)據(jù)結(jié)構(gòu)來(lái)組織就緒任務(wù)。共享一個(gè)優(yōu)先級(jí)的任務(wù)組成了一個(gè)任務(wù)子集,它們也組成了一個(gè)鏈表。然后把不同子集的鏈表表頭按優(yōu)先級(jí)由高到低鏈接起來(lái),組成了所有就緒任務(wù)的鏈表,如圖l所示。由于按照優(yōu)先級(jí)由高到低的順序來(lái)組織任務(wù)子集鏈表,因此最高優(yōu)先級(jí)的任務(wù)總是在鏈表頭部,這樣會(huì)使調(diào)度器能快速選取到最高優(yōu)先級(jí)的任務(wù),但也會(huì)導(dǎo)致低優(yōu)先級(jí)任務(wù)選取得很慢。

    Trampoline使用一個(gè)tpl_running_task指針指向當(dāng)前正在運(yùn)行的任務(wù)。調(diào)度器管理著就緒任務(wù)的集合,當(dāng)重新調(diào)度發(fā)生時(shí),從就緒任務(wù)集合中選取一個(gè)最高優(yōu)先級(jí)的任務(wù)來(lái)執(zhí)行,并把它從就緒任務(wù)集合里刪除。然后,tpl_running_task指針指向該任務(wù),并把任務(wù)的狀態(tài)由就緒態(tài)改為運(yùn)行態(tài)。該任務(wù)將一直處在運(yùn)行狀態(tài),直到運(yùn)行結(jié)束或一個(gè)系統(tǒng)服務(wù)阻塞了它的執(zhí)行,或被一個(gè)更高優(yōu)先級(jí)任務(wù)搶占。另外,一個(gè)任務(wù)可以是不可搶占的。在這種情況下,它將一直占有CPU,直到運(yùn)行結(jié)束(即使有一個(gè)更高優(yōu)先級(jí)就緒任務(wù)在等待)。Trampoline也支持使用任務(wù)組的結(jié)構(gòu)來(lái)實(shí)現(xiàn)混合調(diào)度。在這種調(diào)度模式下,把所有就緒任務(wù)分成不同的任務(wù)組,同一個(gè)任務(wù)組里的任務(wù)之間是不可搶占的,但它可以被這個(gè)組外的更高優(yōu)先級(jí)任務(wù)搶占。
2.2 任務(wù)管理
    Trampoline使用任務(wù)描述符結(jié)構(gòu)(struct tpl_task)來(lái)管理任務(wù)的信息,其中包括系統(tǒng)運(yùn)行時(shí)不斷變化的信息,如任務(wù)狀態(tài)、任務(wù)優(yōu)先級(jí)、任務(wù)的激活次數(shù)、任務(wù)的資源、
任務(wù)的事件等;還包括系統(tǒng)運(yùn)行時(shí)不變的信息,如任務(wù)的上下文、任務(wù)的堆棧、任務(wù)代碼段入口地址、任務(wù)ID、任務(wù)基礎(chǔ)優(yōu)先級(jí)、最大激活次數(shù)和類(lèi)型等信息。為了減少內(nèi)存的使用,Trampoline任務(wù)描述符結(jié)構(gòu)被分成圖2所示的兩個(gè)部分:第一部分是系統(tǒng)運(yùn)行時(shí)不斷變化的數(shù)據(jù),保存在tpl_exec_common結(jié)構(gòu)里,它必須常駐RAM中;另一部分是在系統(tǒng)運(yùn)行時(shí)不變的部分,保存在tpl_exec_static結(jié)構(gòu)里。在tpl_exec_common結(jié)構(gòu)里設(shè)置了一個(gè)指針static_desc,指向任務(wù)的tpl_exec_static結(jié)構(gòu)。由于tpl_exec_static里存放的信息在系統(tǒng)運(yùn)行時(shí)是不變的,因此可以把這部分放到ROM里,以節(jié)省RAM的使用。在tpl_exec_static結(jié)構(gòu)里有兩部分是體系結(jié)構(gòu)相關(guān)的,即上下文結(jié)構(gòu)context和堆棧結(jié)構(gòu)stack,它們使用指向一個(gè)或多個(gè)RAM區(qū)域的指針來(lái)保存任務(wù)執(zhí)行的上下文和堆棧信息。這種設(shè)計(jì)使得不同的任務(wù)之間可以通過(guò)共享指向上下文或堆棧結(jié)構(gòu)的指針就能共享上下文和堆棧,從而可以減少任務(wù)上下文和堆棧所占用的存儲(chǔ)空間。另外,Trampoline上下文結(jié)構(gòu)的設(shè)計(jì)可以使用盡可能少的RAM。例如,如果目標(biāo)平臺(tái)處理器沒(méi)有FPU(浮點(diǎn)處理器),Trampoline上下文結(jié)構(gòu)有兩個(gè)指針,第一個(gè)指向整數(shù)上下文的RAM區(qū)域,第二個(gè)指向浮點(diǎn)上下文RAM區(qū)域,這些RAM區(qū)域都是用來(lái)保存任務(wù)運(yùn)行時(shí)要使用的整數(shù)寄存器或浮點(diǎn)寄存器的。然而,并不是每個(gè)任務(wù)都需要使用浮點(diǎn)寄存器,如果任務(wù)沒(méi)有使用FPU,第二個(gè)指針將會(huì)設(shè)為空,以避免分配浮點(diǎn)寄存器所占用的RAM空間。任務(wù)上下文和堆棧結(jié)構(gòu)都屬于與體系結(jié)構(gòu)有關(guān)的代碼,內(nèi)核不直接同這部分打交道,而是通過(guò)硬件抽象層來(lái)使用它們。這樣,使得與體系結(jié)構(gòu)相關(guān)的代碼與無(wú)關(guān)的代碼隔離起來(lái),從而便于把它移植到其他平臺(tái)。[!--empirenews.page--]

2.3 中斷管理
    在OSEK操作系統(tǒng)中,ISR(Interrupt Service Routine)分成了兩類(lèi),即ISRl和ISR2。ISRl不使用操作系統(tǒng)服務(wù),也不能調(diào)用其他的用戶定義函數(shù)。該類(lèi)中斷服務(wù)例程執(zhí)行完了以后直接執(zhí)行中斷發(fā)生位置后的下一條指令,因此ISRl對(duì)任務(wù)管理沒(méi)有影響,運(yùn)行時(shí)消耗的資源也比較少。ISR2是可以調(diào)用其他用戶定義的函數(shù)或使用部分OSEK服務(wù)的中斷例程,OSEK操作系統(tǒng)專(zhuān)門(mén)為它準(zhǔn)備了一個(gè)堆棧Frame,用作調(diào)用其他函數(shù)的執(zhí)行環(huán)境。在系統(tǒng)生成階段,由用戶指定ISR2要調(diào)用的用戶定義函數(shù)或系統(tǒng)調(diào)用。ISR2能夠和任務(wù)之間共享資源,而這可能會(huì)造成死鎖:當(dāng)ISR2啟動(dòng)后試圖獲得一個(gè)已經(jīng)被一個(gè)任務(wù)占用的資源時(shí),該任務(wù)也在等待中斷完成,因此ISR2和任務(wù)之間共享資源時(shí)需要使用同步機(jī)制。OSEK操作系統(tǒng)提供了用于資源訪問(wèn)的GetResource和ReleaseResouree系統(tǒng)調(diào)用,任務(wù)和ISR2之間可以使用它們來(lái)共享資源,但是這種方法需要關(guān)閉訪問(wèn)資源的中斷,可能使中斷長(zhǎng)時(shí)間關(guān)閉,降低了操作系統(tǒng)的實(shí)時(shí)響應(yīng)能力。另一種任務(wù)和ISR2之間共享資源的方法是OSEK標(biāo)準(zhǔn)所建議的方法,也就是使用OSEK PCP協(xié)議。使用這種方法時(shí),當(dāng)一個(gè)任務(wù)要獲取同ISR2共享的資源時(shí),會(huì)把它的優(yōu)先級(jí)提升到比ISR2更高的優(yōu)先級(jí),當(dāng)任務(wù)執(zhí)行完成之后,再把優(yōu)先級(jí)恢復(fù)到原來(lái)的優(yōu)先級(jí)。這時(shí)ISR2更像任務(wù),但是比普通任務(wù)有更高的優(yōu)先級(jí)。
    Trampoline實(shí)現(xiàn)了一種延遲的ISRl和ISR2,從而使操作系統(tǒng)內(nèi)核更小。任務(wù)和ISR的描述符都繼承自一個(gè)tpl_exec_common結(jié)構(gòu),如圖2所示。任務(wù)描述符在tpl_exec_common結(jié)構(gòu)里增加了事件管理的數(shù)據(jù)成員,也就是evl_set和evt_wait數(shù)據(jù)成員;而ISR描述符在tpl_exec_common結(jié)構(gòu)里增加了一個(gè)指向附加數(shù)據(jù)的指針,也就是static_isr_desc數(shù)據(jù)成員,static_isr_desc指向的內(nèi)容可以放到ROM中,以減少RAM的使用。一個(gè)ISR對(duì)應(yīng)著一個(gè)中斷向量。當(dāng)一個(gè)中斷觸發(fā)時(shí),Trampoline激活對(duì)應(yīng)的ISR中斷服務(wù)例程并且返回。如果是ISRl,執(zhí)行完了以后將執(zhí)行觸發(fā)中斷位置后面的代碼;如果是ISR2,ISR2將運(yùn)行預(yù)先定義的用戶定義函數(shù)或者系統(tǒng)服務(wù),然后像普通任務(wù)一樣由調(diào)度器根據(jù)任務(wù)級(jí)的調(diào)度策略來(lái)調(diào)度執(zhí)行。
    另外,Trampoline為ISR增加了一個(gè)抽象層。這樣,一方面幾個(gè)硬件中斷可以共享相同的中斷向量偏移,另一方面對(duì)應(yīng)到一個(gè)中斷向量偏移的,有一個(gè)ISR的集合,而不是一個(gè)ISR。當(dāng)一個(gè)硬件中斷觸發(fā)時(shí),為了找到一個(gè)與該硬件中斷匹配的ISR,每組共享中斷偏移的ISR都必須提供一個(gè)函數(shù)來(lái)測(cè)試它對(duì)應(yīng)的設(shè)備中斷標(biāo)志是否為真。如果函數(shù)返回TRUE,該ISR將被激活。Trampoline設(shè)計(jì)了一種GIH(General Interrupt Handler)函數(shù)來(lái)完成這種測(cè)試工作。
    而這樣做有兩個(gè)問(wèn)題。第一,由于ISR2的后期執(zhí)行是在任務(wù)態(tài)運(yùn)行,這時(shí)如果有一個(gè)硬件中斷觸發(fā),就會(huì)由GIH來(lái)確定一個(gè)ISR來(lái)執(zhí)行,從而打斷了原來(lái)的ISR2。即使后來(lái)觸發(fā)的ISR的優(yōu)先級(jí)比原來(lái)ISR2的優(yōu)先級(jí)低,這種情況也能發(fā)生。這就造成了一個(gè)低優(yōu)先級(jí)的硬件中斷搶占了高優(yōu)先級(jí)的中斷,而這種情況是不應(yīng)該發(fā)生的,因此是一個(gè)很大的問(wèn)題。第二,根據(jù)OSEK操作系統(tǒng)標(biāo)準(zhǔn),當(dāng)ISR運(yùn)行時(shí),不能進(jìn)行重新調(diào)度。在Trampoline中,ISR2作為高優(yōu)先級(jí)的普通任務(wù)進(jìn)行調(diào)度,當(dāng)一個(gè)高優(yōu)先級(jí)ISR2到來(lái)時(shí),任務(wù)調(diào)度器會(huì)重新調(diào)度一次,從而打斷了原來(lái)的ISR2的執(zhí)行。另外,在OSEK操作系統(tǒng)標(biāo)準(zhǔn)中,重新調(diào)度是在任務(wù)之間的重新調(diào)度;而在Trampoline中,只要有一個(gè)ISR2在運(yùn)行,重新調(diào)度只能在有比普通任務(wù)更高優(yōu)先級(jí)的ISR2之間進(jìn)行。當(dāng)最后運(yùn)行的ISR2結(jié)束時(shí),CPU的重新調(diào)度才給了有最高優(yōu)先級(jí)的任務(wù),因此,Trampoline的中斷管理部分的實(shí)現(xiàn)還有待改進(jìn)。


3 在Linor/x86上開(kāi)發(fā)TramooIine應(yīng)用程序
    Trampoline目前可以在四種目標(biāo)平臺(tái)上使用:帶有Keil編譯器的Infineon C167、Darwin/PowerPC、FreesealeS12x和POSIX系列操作系統(tǒng)平臺(tái)。前三種平臺(tái)的硬件不常見(jiàn),如果沒(méi)有就不能運(yùn)行;而POSIX系列的Linux/x86平臺(tái)則很容易得到。下面以Linux/x86平臺(tái)為例,說(shuō)明開(kāi)發(fā)一個(gè)Trampoline應(yīng)用程序的步驟和方法:
    ①生成應(yīng)用程序的OIL配置文件。OSEK/VDX 0S是一個(gè)靜態(tài)操作系統(tǒng),系統(tǒng)對(duì)象需要在系統(tǒng)生成時(shí)定義。OIL是書(shū)寫(xiě)這種定義的標(biāo)準(zhǔn)語(yǔ)言。它可以定義所有的應(yīng)用程序使用的各種對(duì)象(任務(wù)、中斷、警報(bào)、計(jì)數(shù)器、資源、事件等)。OIL配置文件可以手工編寫(xiě),也可以使用圖形化開(kāi)發(fā)配置工具來(lái)生成。目前Trampoline沒(méi)有圖形化配置工具,只能手工編寫(xiě)OIL配置文件。
    ②使用OIL文件解析器GOIL將應(yīng)用程序的OIL文件轉(zhuǎn)化為一個(gè).c文件和.h文件,其主要功能是進(jìn)行與應(yīng)用程序相關(guān)的各種系統(tǒng)對(duì)象參數(shù)的定義、初始化等工作。
    ③使用GCC工具鏈將②生成的文件和Trampoline操作系統(tǒng)內(nèi)核文件及l(fā)ibpcl庫(kù)文件、VIPER虛擬處理器文件等進(jìn)行編譯和鏈接,生成一個(gè)Linux平臺(tái)的可執(zhí)行文件,也就是最終的應(yīng)用程序可執(zhí)行文件。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉