在线免费观看成年人视频-在线免费观看国产-在线免费观看国产精品-在线免费观看黄网站-在线免费观看精品

產品分類

當前位置: 首頁 > 工業電氣產品 > 電氣附件 > 冷壓端子

類型分類:
科普知識
數據分類:
冷壓端子

Windows Embedded Compact 實時調度介紹

發布日期:2022-04-27 點擊率:168 品牌:EMB

  • 關鍵詞: Windows Embedded Compact
  • 摘要:本文介紹了Windows Embedded Compact 實時調度的定義、軟硬件平臺搭建及程序運行設置等,可供學習參考。

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

a). 具有更高優先級的任務先被執行

b). 同樣優先級的任務按100ms時間間隔(或Task Quantum定義的時間間隔)循環輪流執行

對于第一條規則,WinCE提供256個優先級等級(0-255),數字越小優先級越高,因此0級為最高優先級,關于優先級的應用本文不做重點描述,請參考下面文章:

Real-TimePriority System Levels (Windows Embedded CE 6.0)

對于第二條規則,當多個待處理任務擁有同樣的優先級,將按照100ms時間間隔(可以根據Thread Quantum自定義)循環輪流執行。例如有N個同樣優先級的任務,當第一個運行了上述定義時間片(WinCE稱其為Quantum,如100ms),系統內核就會將其中斷然后執行第二個任務,依此類推,直到N個任務都執行過一個Quantum時間后再重新回到第一個任務執行,如此循環。任一個線程最多只能運行一個Quantum的時間,除非另一個更高優先級的任務需要占用CPU,則按照第一條規則,這個線程會被更高優先級任務占用。


下面我們通過兩個例子來驗證上述兩個規則,硬件平臺使用ToradexColibri VF61NXP/Freescale Vybrid Cortex-A5 )計算機模塊搭配Iris 載板,軟件使用Toradex提供的對應此平臺的工業級的WinCE6OSGPIO

a). 軟硬件平臺搭建請參考開發指南,如下圖所示

b). 驗證原理為在系統中啟動兩個任務,第一個任務驅動硬件某個GPIO輸出為低電平,而另一個則將同一個GPIO輸出為高電平;再將這兩個任務的優先級分別設置為相同和不同時候,通過觀測GPIO連接的示波器輸出來判定上述的兩個調度規則。關鍵代碼如下:創建兩個線程入口函數ThreadONThreadOFF,分別用來將選定的GPIO輸出為高電平和低電平,而從函數內部代碼可見會持續輸出高電平或者低電平,因此我們通過示波器觀察GPIO管腳的輸出即可得出目前是哪個函數在運行。

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

#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). 首先我們來測試第二條規則,將兩個任務的優先級設置為相同值(如上面代碼為100),運行程序后示波器圖形如下,可以看到每隔100ms GPIO輸出循環交替變化,完全符合我們第二條規則。

d). 然后我們再來測試第一條規則,如下修改一個任務(ThreadON)的代碼,將其優先級提高到99,另外在循環中增加一個5ms的暫停時間。

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

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). 運行修改后的程序,示波器輸出如下結果,每隔7ms左右有一個拉高的脈沖,表示每次當高優先級的任務(ThreadON)從5ms 暫停時間恢復后,都會中斷低優先級任務的執行,這樣完全符合第一條規則的描述。

  當然,以上所有測試都是基于單核心系統,從Windows Embedded Compact 7 開始,WinCE內核提供了對多核心處理器的支持,同時也有一個新的屬性“affinity”來定義哪一個核心來執行哪一個線程,所以如果在多核系統和WEC7上面運行上述例子,同時并未限定線程在同一個核心上面執行,則結果會不同因為兩個線程會同時在不同核心上面運行。當然,其實正常應用情況下我們是不建議設置“affinity”參數的,因為這樣就無法使得內核調度來自動安排線程在最先空閑的核心上面運行,達不到降低延遲提高系統性能的要求了。

  實時系統目前在包括工業自動化,機器人和醫療領域等嵌入式設備上面有廣泛的需求,因此了解WinCE的實時調度工作機制以及如何使用線程可以讓我們的應用程序實時穩定的執行,讓我們更高效可靠的利用WinCE搭建我們的實時系統!

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

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

推薦產品

更多
三个女儿一锅烩大团圆全文阅读| 色妞AV永久一区二区国产AV开 | 亚洲AV极品无码专区亚洲AV| 亚洲日韩中文字幕无码一区| 99国内精品久久久久影院 | 国产精品久久无码一区二区三区网 | 一区二区三区国产好的精华液| 99久久精品无码一区二区毛片 | 极品少妇被猛的白浆直喷白浆 | 精品国色天香一卡2卡3卡 | 好爽…又高潮了毛片无广告| 老熟女露脸内射正在播放| 琪琪777午夜理论片在线观看播| 丝袜一区二区三区在线播放| 亚洲精品无码成人片久久| 5566好久不见MP3免费下载| 大学生被内谢粉嫩无套| 国内精品自国内精品自线| 男男av在线播放| 天美传媒MV免费观看软件的特点| 亚洲色大成网站WWW永久一区| HD老熟女BBN老淑女| 国产群交视频一区二区三区铁牛 | 国产乱码卡二卡三卡43| 乱人伦人妻中文字幕无码| 少妇扒开粉嫩小泬视频| 亚洲午夜无码AV毛片久久| 成人免费一区二区三区视频软件| 极品性荡少妇一区二区| 人妻无码视频一区二区三区| 亚洲VA中文字幕无码一二三区| ASIAN日本裸体PICS| 国产美女裸体无遮挡免费视频高潮| 裸睡时一自慰不小心就滑进去啦| 熟妇的荡欲乱色欲av浪潮| 一本大道久久A久久综合| 高潮大叫喷水发抖抽搐| 久久久一本精品99久久精品66| 少妇伦子伦情品无吗| 亚洲综合网站色欲色欲| 丰满大爆乳波霸奶| 久热中文字幕无码视频| 无码人妻丰满熟妇啪啪7774| 自拍偷自拍亚洲精品播放| 国产未成满18禁止免费看| 女人两个奶被揉到高潮就不想了| 亚欧免费无码AⅤ在线观看| Chinese老妇性饥渴老熟女| 后进式疯狂摇乳无遮挡GIF| 人与动物PPT免费模板| 亚洲熟妇丰满XXXXX黑| 国产AV一区二区三区传媒| 免费热播女人毛片| 小诗的公交车日记第9章| S货叫大点声C烂你的SB| 精品无码AV一区二区三区少妇 | 高雅人妻被迫沦为玩物| 免费影视观看网站入口| 亚洲成A人片在线播放| 成人永久免费福利视频免费| 乱码一卡2卡3卡4卡精品| 亚洲AV噜噜狠狠网址蜜桃| 成人免费无码大片A毛片小说 | 国产亚洲日韩欧美另类丝瓜APP| 朋友人妻少妇精品系列| 野花高清视频免费观看完整版中文 | 人妻丝袜AV先锋影音先| 一区二区三区精品视频日本| 国产在线乱码一区二区三区| 色狠狠一区二区三区香蕉| 20厘米的粗黑巨物挺进| 精产国品一二三产区区别在哪儿呢 | FREE性丰满HD性欧美| 久久精品国产亚洲AV瑜伽| 性欧美VIDEO高清| 豆国产97在线 | 亚洲| 女同久久精品国产99国产精品| 亚洲熟女一区二区三区| 国产亚洲视频在线观看播放| 少妇性饥渴XXⅩXXHD| JΑPΑN丰满人妻HDXXXX| 麻豆视频传媒入口| 亚洲欧洲日产国码无码AV喷潮 | 学渣含着学霸几巴的写作业视频| 抖抈短视频APP免费下载| 欧美丰满熟妇BBBBBB百度| 一区二区日韩视频| 久99久热爱视频精品免费37| 亚洲AV成人一区国产精品小说| 国产AV成人精品播放| 日本又黄又爽GIF动态图| CSGO未满十八岁能玩多久| 麻豆亚洲AV熟女国产一区二 | 偷窥 间谍 隐 TUBE| 粗了大了 整进去好爽视频| 欧美性爱XXXX黑人| 中文字幕无码视频手机免费看| 久久精品国产精品亚洲| 亚洲男人的天堂AV手机在线观看| 国产真人无码作爱免费视频| 五十路丰满熟女av名单大全| 国产丰满老熟女重口对白| 色翁荡息又大又硬又粗又爽 | 亚洲综合成人婷婷五月网址| 精品国产一区二区三区AV片| 亚洲AV日韩综合一区| 国产农村妇女毛片精品久久麻豆| 天干天干啦夜天天喷水| 公交车上穿短裙被狂C| 色欧美与xxxxx| 绯色av一区二区| 色欧美与xxxxx| 风流少妇又紧又爽又丰满| 色狠狠色噜噜AV一区| 隔壁人妻被水电工征服| 十八款夜间禁用APP| 国产97色在线 | 日韩| 爽到高潮无码视频在线观看| 国产9在线 | 欧洲| 天天做天天爱夜夜爽| 国产极品粉嫩馒头一线天AV| 为了升职丈夫把我献给他们领导| 国产成人久久精品流白浆| 特级毛片爽WWW免费版| 国产精品第一区揄拍无码| 午老司机午夜福利视频| 国产午夜精品一区二区三区不卡| 亚洲AV成人精品日韩一区| 好黄好污美女裸体网站| 亚洲国产日韩欧美高清片| 精品无码国产自产拍在线观看 | JAPANESE55丰满成熟| 秋霞电影院午夜无码中文| 宝贝把腿张得大一点就不痛了| 日本三级强乳伦姧| 风流老熟女一区二区三区| 天天躁日日躁狠狠躁视频2021 | 久久人妻无码一区二区三区AV| 欲求不満な人妻は毎晩隣人に| 美女露胸 0无挡挡| FREEⅩXX性欧美HD丝袜| 日韩欧美亚洲综合久久影院DS | 私はあなたを爱しています怎么读| 国产精品久久久久久婷婷| 亚洲AV永久无码精品无码少妇 | 国产精品国产三级国产试看| 性高朝久久久久久久| 久久99精品久久久久久HB| 中文字幕无码免费久久| 人人妻人人澡AV| 国产成人乱色伦区| 亚洲大胸美女被操喷水| 老太太BGMBGMBGM11| Xx性欧美肥妇精品久久久久久久久| 日韩精品无码一区二区视频| 国产精品自在在线午夜出白浆| 亚洲精品美女久久久久99| 麻豆视传媒官网免费观看| 草棚CAOPORON已满18进| 无遮挡边吃奶边做的视频刺激| 极品少妇被猛得白浆直流草莓视频| 又爽又黄无遮挡高潮视频网站| 欧美体内SHE精视频| 国产粉嫩呻吟一区二区三区| 亚洲色精品VR一区二区三区| 欧美成人在线最新| 绯色av一区二区三区蜜臀| 亚洲AV中文无码乱人伦在线r▽| 久久综合精品国产二区无码| 帮妺妺洗澡忍不住C了她作文 | 国产精品JIZZ在线观看| 亚洲日本乱人伦片中文| 欧美性猛交XXXXXⅩXX| 国产激情一区二区三区小说| 亚洲色大成网站WWW永久网站| 欧美人妻久久精品| 国产精品无码无片在线观看| 一二三四视频中文字幕| 日本熟妇人妻XXXXXHD| 韩国三级HD中文字幕叫床| 777亚洲熟妇自拍无码区| 偷拍 拍自 欧美色区| 久久久一本精品99久久精品| 成人H动漫无码网站久久| 亚洲第一成人网站| 中文成人无码精品久久久不卡| YY8840私人影院爱不停下载| 7777久久亚洲中文字幕| 日韩一区国产二区欧美三区| 精品精品国产高清A毛片| А√最新版资源在线官网| 亚洲AV成人无码精品网站| 嫩草影院网站进入| 国产精品无码电影在线观看| 中文无码AV电影在线观看网站| 天天狠天天透天干天天怕| 疯狂做受XXXⅩ高潮高潮按摩| 亚洲色18禁成人网站WWW永久| 日韩精品久久久肉伦网站| 久久99国产精品久久99小说|