环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產品分類

當前位置: 首頁 > 傳感測量產品 > 工業傳感器 > 溫濕度傳感器

類型分類:
科普知識
數據分類:
溫濕度傳感器

基于WEC7的多核系統編程方法

發布日期:2022-04-26 點擊率:61

  • 關鍵詞:                                                                WEC7

  • 摘要:在多個程序同時執行的情況下,支持SMP的多核系統具有比單處理器更好的性能,因為不同的程序可以在不同的處理器上同時運行,支持SMP還可以實現在一個核心上執行硬實時應用程序,而用戶界面(UI)或其它應用程序可在另一個核心上運行,以提高系統的效率。


  Windows Embedded Compact 7(WEC7)一個最重要的特性就是對多核處理器的支持(Symmetric Multi-Processing(SMP)),ESM6802是英創公司推出的基于Freescale  i.MX6DL雙核處理器的高性能工控主板,預裝正版WEC7嵌入式操作系統,并且內核啟用了對SMP的支持。在多個程序同時執行的情況下,支持SMP的多核系統具有比單處理器更好的性能,因為不同的程序可以在不同的處理器上同時運行,支持SMP還可以實現在一個核心上執行硬實時應用程序,而用戶界面(UI)或其它應用程序可在另一個核心上運行,以提高系統的效率。


  WEC7提供了一組處理多核系統上線程和處理器調度的SMP API接口函數:

  https://msdn.microsoft.com/en-us/library/gg154433(v=winembedded.70).aspx


  其中應用程序常用的SMP API如下所示:


 GetCurrentProcessorNumber  獲取在調用此函數期間當前線程正在運行的處理器

 CeGetIdleTimeEx       獲取指定處理器的空閑時間

 CeGetProcessAffinity     獲取指定進程的進程關聯

 CeGetThreadAffinity     獲取指定線程的線程關聯

 CeGetTotalProcessors    獲取系統中的處理器核心總數

 CeSetProcessAffinity    為指定的進程設置處理器關聯

 CeSetThreadAffinity     為指定的線程設置處理器關聯


  默認情況下,WEC7系統會自動的將系統負載分配到CPU的所有核心上運行,應用程序不需要做任何設置。但根據不同的應用場景,應用程序也可以利用SMP API手動的設置每個進程、每個線程在指定的CPU核心上運行,這里以計算ESM6802 i.MX6DL CPU每個核心的負載為例,介紹WEC7 SMP API的使用方法。


  應用程序首先通過CeGetTotalProcessors函數獲取當前系統總的處理器(核心)個數,然后根據CPU核心個數創建相同數量的CPUIdleMonitorThread應用線程用于計算CPU負載,在創建線程后通過CeSetThreadAffinity函數將所創建的線程固定在指定的CPU核心上運行。CPUIdleMonitorThread線程函數在執行時先調用GetCurrentProcessorNumber函數取得執行當前線程的CPU核,而后再利用CeGetIdleTimeEx函數最終計算出每個CPU核心的負載率。完整的例子代碼如下:


  #include "stdafx.h"

  // time in seconds to run the monitor thread

  #define IDLE_MONITOR_TIME   100


  HANDLE g_hMonitorThreads[4];


  UINT32 CPUIdleMonitorThread(PVOID pContext)

  {

      UINT32 nCPUId = ((UINT32*)pContext)[0];

      UINT32 nRunTime = ((UINT32*)pContext)[1];

      UINT32 nIdleBefore, nIdleAfter, nIdleDiff, nIdlePercent;

      UINT32 nReturn = ERROR_SUCCESS;


     LARGE_INTEGER pcBefore = { 0, 0 };

      LARGE_INTEGER pcAfter = { 0, 0 };

      LARGE_INTEGER diff;

      LARGE_INTEGER freq;


      RETAILMSG(1, (L"[CPU%d] Run monitor thread for %d seconds ", nCPUId, nRunTime));


     // The processor number is a 1-based index.

      QueryPerformanceFrequency(&freq);


      while (nRunTime > 0)

      {

          nCPUId = GetCurrentProcessorNumber();

          CeGetIdleTimeEx(nCPUId, (LPDWORD)&nIdleBefore);


          QueryPerformanceCounter(&pcBefore);

          Sleep(2000);

          QueryPerformanceCounter(&pcAfter);


         CeGetIdleTimeEx(nCPUId, (LPDWORD)&nIdleAfter);


          diff.QuadPart = (pcAfter.QuadPart - pcBefore.QuadPart) * 1000 / freq.QuadPart;

          nIdleDiff = nIdleAfter - nIdleBefore;

          nIdlePercent = nIdleDiff / 20;


          RETAILMSG(1, (L"[CPU%d] Sleep: 2000 ms (actual:%d ms)  Idle: %03d ms (CPU%d = %d%%) ",

               nCPUId, diff.LowPart, nIdleDiff, nCPUId, 100 - nIdlePercent));

          nRunTime--;

      }


     SetEvent(g_hMonitorThreads[nCPUId - 1]);

      return nReturn;

  }


  int WINAPI WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPTSTR     lpCmdLine,

                     int       nCmdShow)

  {

     UINT32 nCPUCount;

      UINT32 nTemp = 0;

      UINT32 i;

      UINT32 nParam[8] = { 1, IDLE_MONITOR_TIME, 2, IDLE_MONITOR_TIME, 3, IDLE_MONITOR_TIME, 4, IDLE_MONITOR_TIME };


      nCPUCount = CeGetTotalProcessors();


      for(i = 0; i < nCPUCount; i++)

          g_hMonitorThreads[i] = CreateEvent(NULL, TRUE, FALSE, NULL);

 

      nTemp = 1;


     CeSetThreadAffinity(GetCurrentThread(), 1);


      for (i = 1; i < nCPUCount; i++)

      {

          HANDLE hThread = CreateThread(

              NULL,

              0,

              (LPTHREAD_START_ROUTINE)CPUIdleMonitorThread,

              &nParam[i * 2],

              CREATE_SUSPENDED,

              NULL);


         if (NULL != hThread)

          {

              CeSetThreadAffinity(hThread, i + 1);

              ResumeThread(hThread);

              Sleep(0);

              CloseHandle(hThread);

              nTemp++;

          }

          else

          {

              SetEvent(g_hMonitorThreads[i]);

          }

      }


      CPUIdleMonitorThread(&nParam[0]);


      Sleep(2000);

      for(i = 0; i < nCPUCount; i++)

          WaitForSingleObject(g_hMonitorThreads[i], (IDLE_MONITOR_TIME + 5) * 1000);


      RETAILMSG(1, (L"[CPULOAD] Number of CPUs monitored: %d ", nTemp));


      return 0;

  }


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

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

推薦產品

更多
主站蜘蛛池模板: 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 【电子厂招聘_普工招工网_工厂招聘信息平台】-工立方打工网 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 超声波反应釜【百科】-以马内利仪器 | 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 煤矿人员精确定位系统_矿用无线通信系统_煤矿广播系统 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 耐破强度测试仪-纸箱破裂强度试验机-济南三泉中石单品站 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 雪花制冰机(实验室雪花制冰机)百科 | 北京律师咨询_知名专业北京律师事务所_免费法律咨询 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 喷播机厂家_二手喷播机租赁_水泥浆洒布机-河南青山绿水机电设备有限公司 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | LED投光灯-工矿灯-led路灯头-工业灯具 - 山东普瑞斯照明科技有限公司 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 食药成分检测_调料配方还原_洗涤剂化学成分分析_饲料_百检信息科技有限公司 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 心肺复苏模拟人|医学模型|急救护理模型|医学教学模型上海康人医学仪器设备有限公司 | 领先的大模型技术与应用公司-中关村科金| 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 |