日韩成人激情_欧美黑人xxx_国产一区二精品区在线_精品在线一区_97成人资源_久久久久久一区

產(chǎn)品分類

當(dāng)前位置: 首頁 > 工業(yè)電氣產(chǎn)品 > 電氣附件 > 冷壓端子

類型分類:
科普知識(shí)
數(shù)據(jù)分類:
冷壓端子

Windows Embedded Compact 實(shí)時(shí)調(diào)度介紹

發(fā)布日期:2022-04-27 點(diǎn)擊率:125 品牌:EMB

  • 關(guān)鍵詞: Windows Embedded Compact
  • 摘要:本文介紹了Windows Embedded Compact 實(shí)時(shí)調(diào)度的定義、軟硬件平臺(tái)搭建及程序運(yùn)行設(shè)置等,可供學(xué)習(xí)參考。

  實(shí)時(shí)調(diào)度機(jī)制(Real-Time Scheduler)是Windows Embedded Compact區(qū)別于其他所有Windows系統(tǒng)的最顯著特性,同時(shí)也是開發(fā)嵌入式系統(tǒng)時(shí)需要著重考慮的部分。在工程領(lǐng)域?qū)Α皩?shí)時(shí)”的理解,我非常欣賞下面的定義:“一個(gè)實(shí)時(shí)系統(tǒng)必須要滿足明確的(受限的)響應(yīng)時(shí)間約束或風(fēng)險(xiǎn)的嚴(yán)重后果,包括失效狀態(tài)”- 出自于Phillip A. Laplante Real-Time System Design and Analysis所以,一個(gè)實(shí)時(shí)系統(tǒng)中執(zhí)行一個(gè)代碼必須在規(guī)定的時(shí)間約束內(nèi)有明確的結(jié)果,否則就可能會(huì)導(dǎo)致系統(tǒng)失效,實(shí)時(shí)并不一定意味著快速處理能力。Windows Embedded Compact正符合上述對于實(shí)時(shí)系統(tǒng)的定義,因此為了進(jìn)一步理解,我們首先來了解它的任務(wù)調(diào)度機(jī)制,WinCE的任務(wù)調(diào)度內(nèi)核每隔1ms查詢一次現(xiàn)有任務(wù)并依據(jù)下面兩個(gè)原則來決定處理哪個(gè)任務(wù):

a). 具有更高優(yōu)先級的任務(wù)先被執(zhí)行

b). 同樣優(yōu)先級的任務(wù)按100ms時(shí)間間隔(或Task Quantum定義的時(shí)間間隔)循環(huán)輪流執(zhí)行

對于第一條規(guī)則,WinCE提供256個(gè)優(yōu)先級等級(0-255),數(shù)字越小優(yōu)先級越高,因此0級為最高優(yōu)先級,關(guān)于優(yōu)先級的應(yīng)用本文不做重點(diǎn)描述,請參考下面文章:

Real-TimePriority System Levels (Windows Embedded CE 6.0)

對于第二條規(guī)則,當(dāng)多個(gè)待處理任務(wù)擁有同樣的優(yōu)先級,將按照100ms時(shí)間間隔(可以根據(jù)Thread Quantum自定義)循環(huán)輪流執(zhí)行。例如有N個(gè)同樣優(yōu)先級的任務(wù),當(dāng)?shù)谝粋€(gè)運(yùn)行了上述定義時(shí)間片(WinCE稱其為Quantum,如100ms),系統(tǒng)內(nèi)核就會(huì)將其中斷然后執(zhí)行第二個(gè)任務(wù),依此類推,直到N個(gè)任務(wù)都執(zhí)行過一個(gè)Quantum時(shí)間后再重新回到第一個(gè)任務(wù)執(zhí)行,如此循環(huán)。任一個(gè)線程最多只能運(yùn)行一個(gè)Quantum的時(shí)間,除非另一個(gè)更高優(yōu)先級的任務(wù)需要占用CPU,則按照第一條規(guī)則,這個(gè)線程會(huì)被更高優(yōu)先級任務(wù)占用。


下面我們通過兩個(gè)例子來驗(yàn)證上述兩個(gè)規(guī)則,硬件平臺(tái)使用ToradexColibri VF61NXP/Freescale Vybrid Cortex-A5 )計(jì)算機(jī)模塊搭配Iris 載板,軟件使用Toradex提供的對應(yīng)此平臺(tái)的工業(yè)級的WinCE6OSGPIO

a). 軟硬件平臺(tái)搭建請參考開發(fā)指南,如下圖所示

b). 驗(yàn)證原理為在系統(tǒng)中啟動(dòng)兩個(gè)任務(wù),第一個(gè)任務(wù)驅(qū)動(dòng)硬件某個(gè)GPIO輸出為低電平,而另一個(gè)則將同一個(gè)GPIO輸出為高電平;再將這兩個(gè)任務(wù)的優(yōu)先級分別設(shè)置為相同和不同時(shí)候,通過觀測GPIO連接的示波器輸出來判定上述的兩個(gè)調(diào)度規(guī)則。關(guān)鍵代碼如下:創(chuàng)建兩個(gè)線程入口函數(shù)ThreadONThreadOFF,分別用來將選定的GPIO輸出為高電平和低電平,而從函數(shù)內(nèi)部代碼可見會(huì)持續(xù)輸出高電平或者低電平,因此我們通過示波器觀察GPIO管腳的輸出即可得出目前是哪個(gè)函數(shù)在運(yùn)行。

--------------------------------------------------------------------------------------------------------------

#include

#include"gpio.h"

// ===define constant pins / gpios ===

// SODIMMpin 101

uIo io1 =COLIBRI_PIN(101);

HANDLE hGpio;

HANDLE hThreadON,hThreadOFF;

//defineThreadON

DWORD WINAPI ThreadON( LPVOID lpParam ){

    //Set ThreadPriority

    CeSetThreadPriority(GetCurrentThread(), 100);

    Sleep(5); //Allowthe orther Thread to configure it's PRIO

    //FNFINITELOCKING LOOP

    while(1){

        //Set GPIOlogic high

        Gpio_SetLevel(hGpio, io1, ioHigh);

    }

    return 0;

}

//defineThreadOFF

DWORD WINAPI ThreadOFF( LPVOID lpParam ){

    //Set ThreadPriority

    CeSetThreadPriority(GetCurrentThread(),100);

    //FNFINITELOCKING LOOP

    while(1){

        //Set GPIOlogic low

        Gpio_SetLevel(hGpio, io1, ioLow);

    }

    return 0;

}

//=============================================================================

//Application Entry Point

//

// Thesimple error handling using ASSERT statements is only effective when

// theapplication is run as a debug version.

//=============================================================================

int wmain(int argc, _TCHAR* argv[])  

{

   BOOL success;

   // === InitializeGPIO library. ===

   // We don't useregistry-based  configuration, thus wecan

   // pass NULL goGpio_Init()

   hGpio = Gpio_Init(NULL);  

   ASSERT(hGpio != 0);

   success = Gpio_Open(hGpio);

   ASSERT (success);

   // Configure thepin to act as GPIO (as opposed to an Alternate function)

   // Set it toOutput,  High

   Gpio_ConfigureAsGpio(hGpio, io1);

   Gpio_SetDir         (hGpio, io1, ioOutput);

   Gpio_SetLevel       (hGpio, io1, ioHigh);

   CeSetThreadPriority(GetCurrentThread(),99);

    //Create twoconcorrent Threads, one set GPIO to High and other to Low

    hThreadON = CreateThread(NULL, 0, ThreadON,NULL, 0, NULL);

   hThreadOFF = CreateThread(0, 0, ThreadOFF,NULL, 0, NULL);

   

//Time to finish the Program

Sleep(3000);

   return(TRUE);

}

--------------------------------------------------------------------------------------------------------------

c). 首先我們來測試第二條規(guī)則,將兩個(gè)任務(wù)的優(yōu)先級設(shè)置為相同值(如上面代碼為100),運(yùn)行程序后示波器圖形如下,可以看到每隔100ms GPIO輸出循環(huán)交替變化,完全符合我們第二條規(guī)則。

d). 然后我們再來測試第一條規(guī)則,如下修改一個(gè)任務(wù)(ThreadON)的代碼,將其優(yōu)先級提高到99,另外在循環(huán)中增加一個(gè)5ms的暫停時(shí)間。

--------------------------------------------------------------------------------------------------------------

DWORD WINAPI ThreadON( LPVOID lpParam ){

    //Set ThreadPriority

    CeSetThreadPriority(GetCurrentThread(), 99);

    Sleep(5); //Allowthe orther Thread to configure it's PRIO

    //FNFINITELOCKING LOOP

    while(1){

        //Set GPIOlogic high

        Gpio_SetLevel(hGpio, io1, ioHigh);

              Sleep(5);

    }

    return 0;

}

--------------------------------------------------------------------------------------------------------------

e). 運(yùn)行修改后的程序,示波器輸出如下結(jié)果,每隔7ms左右有一個(gè)拉高的脈沖,表示每次當(dāng)高優(yōu)先級的任務(wù)(ThreadON)從5ms 暫停時(shí)間恢復(fù)后,都會(huì)中斷低優(yōu)先級任務(wù)的執(zhí)行,這樣完全符合第一條規(guī)則的描述。

  當(dāng)然,以上所有測試都是基于單核心系統(tǒng),從Windows Embedded Compact 7 開始,WinCE內(nèi)核提供了對多核心處理器的支持,同時(shí)也有一個(gè)新的屬性“affinity”來定義哪一個(gè)核心來執(zhí)行哪一個(gè)線程,所以如果在多核系統(tǒng)和WEC7上面運(yùn)行上述例子,同時(shí)并未限定線程在同一個(gè)核心上面執(zhí)行,則結(jié)果會(huì)不同因?yàn)閮蓚€(gè)線程會(huì)同時(shí)在不同核心上面運(yùn)行。當(dāng)然,其實(shí)正常應(yīng)用情況下我們是不建議設(shè)置“affinity”參數(shù)的,因?yàn)檫@樣就無法使得內(nèi)核調(diào)度來自動(dòng)安排線程在最先空閑的核心上面運(yùn)行,達(dá)不到降低延遲提高系統(tǒng)性能的要求了。

  實(shí)時(shí)系統(tǒng)目前在包括工業(yè)自動(dòng)化,機(jī)器人和醫(yī)療領(lǐng)域等嵌入式設(shè)備上面有廣泛的需求,因此了解WinCE的實(shí)時(shí)調(diào)度工作機(jī)制以及如何使用線程可以讓我們的應(yīng)用程序?qū)崟r(shí)穩(wěn)定的執(zhí)行,讓我們更高效可靠的利用WinCE搭建我們的實(shí)時(shí)系統(tǒng)!

下一篇: PLC、DCS、FCS三大控

上一篇: 索爾維全系列Solef?PV

推薦產(chǎn)品

更多
主站蜘蛛池模板: 亚洲一区二区精品视频在线观看 | 亚洲高清电影 | 一级黄色片网址 | 欧美性久久 | 国产十日韩十欧美 | 国产精品久久久久久久久久久免费看 | 欧美成人一区二免费视频软件 | 日韩免费一区二区 | 婷婷成人在线 | 国产精品一区二区不卡 | 黄色在线播放视频 | 黄色成人国产 | 国产精品99久久久久久人 | 99re视频在线观看 | 亚洲美女视频 | 精品香蕉一区二区三区 | 国产精品一区在线观看 | 在线视频成人 | 日韩一区二区三区精品 | 国产一区999 | 男人的天堂久久 | 久久精品网 | 久久久精品网 | 欧美一级大片免费看 | 成人免费视频观看 | 在线免费观看黄色 | 日韩三级电影在线看 | 国产97在线 | 日韩 | 中文字幕 视频一区 | 91国产精品| 亚洲成av人影片在线观看 | 国产中文字幕网 | 久久一本| 欧美a在线 | 国产成人久久av免费高清密臂 | 亚洲成人三级 | 伊人免费观看视频 | 天天搞天天操 | aaaaaaa片毛片免费观看 | 久久成人一区二区三区 | 国产高清精品一区二区三区 |