0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息威廉希尔官方网站 基于WEC7的多核系统编程方法

英创信息威廉希尔官方网站 来源:英创信息威廉希尔官方网站 作者:英创信息威廉希尔官方网站 2020-02-05 11:05 次阅读

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

#defineIDLE_MONITOR_TIME 100

HANDLE g_hMonitorThreads[4];

UINT32CPUIdleMonitorThread(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\r\n", 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%%)\r\n",

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

nRunTime--;

}

SetEvent(g_hMonitorThreads[nCPUId - 1]);

returnnReturn;

}

intWINAPI 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\r\n", nTemp));

return0;

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    3

    文章

    3545

    浏览量

    88716
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35345
收藏 人收藏

    评论

    相关推荐

    飞腾助力首届教育信息威廉希尔官方网站 应用创新大赛圆满落幕

    近日,由中国教育威廉希尔官方网站 协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准化威廉希尔官方网站 协会信工委会支持,北京航空航天
    的头像 发表于 12-24 09:57 109次阅读

    有方科技参编的信息威廉希尔官方网站 团体标准发布

    近日,有方科技参编的《信息威廉希尔官方网站 产品供应链成熟度 共性指标 第1部分:企业背景评价》《信息威廉希尔官方网站 产品供应链成熟度 共性指标 第2部分:威廉希尔官方网站 掌控评价》《信息威廉希尔官方网站 产品供应链成熟度 共性指标 第
    的头像 发表于 12-23 10:44 125次阅读

    龙芯中科助力2024首届教育信息威廉希尔官方网站 应用创新大赛成功举办

    近日,2024首届教育信息威廉希尔官方网站 应用创新大赛在北京航空航天大学成功举办。本次大赛由中国教育威廉希尔官方网站 协会主办,教育信实验室、公安部第三研究所、中国电子工业标准化威廉希尔官方网站 协会信
    的头像 发表于 12-19 17:02 222次阅读

    拓维信息参与牵头组建!长沙新一代信息威廉希尔官方网站 产教联合体正式获批

    的长沙新一代信息威廉希尔官方网站 产教联合体成功获批,为长沙市信息威廉希尔官方网站 产业发展注入了新的活力。图/《2024年长沙市市级市域产教联合体名单》长沙新一代信息威廉希尔官方网站 产教联合体将依托龙头企
    的头像 发表于 12-07 01:06 369次阅读
    拓维<b class='flag-5'>信息</b>参与牵头组建!长沙新一代<b class='flag-5'>信息威廉希尔官方网站
</b>产教联合体正式获批

    中科达荣获2024年软件和信息威廉希尔官方网站 服务优秀企业

    及前百家企业”名单。中科达凭借非凡的威廉希尔官方网站 实力与持续的创新能力,成功入选“2024年度软件和信息威廉希尔官方网站 服务竞争力百强企业”以及“2024年软件和信息威廉希尔官方网站 服务优秀企业”。
    的头像 发表于 10-30 11:44 486次阅读

    国产化背景下的工控主板发展现状

    ,是信息威廉希尔官方网站 应用创新产业的简称,于2016年“信工委会”(信息威廉希尔官方网站 应用创新工作委员会)提出,目的就是要推动我们国内软硬件关键威廉希尔官方网站 的研发
    的头像 发表于 09-21 16:15 405次阅读

    梯度科技入选2023年信息威廉希尔官方网站 应用创新解决方案名单

    日前,工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)在天津举办2024信息威廉希尔官方网站 应用创新发展大会暨解决方案应用推广大会。会上正式公布了2023年
    的头像 发表于 09-09 16:29 433次阅读

    中软国际信服务助力大连信产业发展

    为进一步激发大连本地信产业生态的活力与潜力,搭建一个高效、开放的交流平台。由大连软件行业协会携手大连市信息威廉希尔官方网站 应用创新综合服务中心主办,中软国际协办的,2024年大连市信息威廉希尔官方网站 应用创新产业发展大会
    的头像 发表于 08-27 16:49 884次阅读

    GB/T 35590-2017信息威廉希尔官方网站 便携式数字设备用移动电源推荐标准

    GB/T 35590-2017是《信息威廉希尔官方网站 便携式数字设备用移动电源通用规范》的国家标准,这是一项由全国信息安全标准化威廉希尔官方网站 委员会归口管理,并联合锂离子电池业内产学研用多家单位联合制定的标准。该标准自
    的头像 发表于 08-12 16:47 1166次阅读
    GB/T 35590-2017<b class='flag-5'>信息威廉希尔官方网站
</b> 便携式数字设备用移动电源推荐标准

    翼辉信息入选2023年信息威廉希尔官方网站 应用创新解决方案名单

    近日,2023 年(第五届)信息威廉希尔官方网站 应用创新解决方案公布遴选名单,历经资格初审、威廉希尔官方网站 中评、区域评议、终评预审,翼辉以“面向工业领域嵌入式操作系统 SylixOS 解决方案”,成功在全国优秀方案中脱颖而出,入选典型解决方案名单。
    的头像 发表于 04-28 11:37 561次阅读
    翼辉<b class='flag-5'>信息</b>入选2023年<b class='flag-5'>信息威廉希尔官方网站
</b>应用创新解决方案名单

    芯盾时代中标西安西热电站信息威廉希尔官方网站 有限公司!

    芯盾时代中标西安西热电站信息威廉希尔官方网站 有限公司!芯盾时代基于完整的身份安全产品体系,增强客户的业务系统、网络设备和安全设备等认证安全强度
    的头像 发表于 04-09 11:32 513次阅读

    龙芯中科三项信方案入围工信部2023年信息威廉希尔官方网站 应用创新应用示范案例名单

    近日,工业和信息化部通报了2023年信息威廉希尔官方网站 应用创新解决方案征集遴选结果,本次共评选出典型解决方案173个、应用示范案例83个、单项创新案例64个。
    的头像 发表于 03-07 16:45 937次阅读
    龙芯中科三项信<b class='flag-5'>创</b>方案入围工信部2023年<b class='flag-5'>信息威廉希尔官方网站
</b>应用创新应用示范案例名单

    RX78M组 EtherCAT ETG.5003示例程序固件信息威廉希尔官方网站

    电子发烧友网站提供《RX78M组 EtherCAT ETG.5003示例程序固件信息威廉希尔官方网站 .pdf》资料免费下载
    发表于 02-21 14:22 1次下载
    RX78M组  EtherCAT ETG.5003示例程序固件<b class='flag-5'>信息威廉希尔官方网站
</b>

    软通动力与捷威廉希尔官方网站 签订战略合作协议

    近日,软通动力信息威廉希尔官方网站 (集团)股份有限公司(以下简称“软通动力”)与宁波捷威廉希尔官方网站 股份有限公司(以下简称“捷威廉希尔官方网站 ”)正式签订战略合作协议,并
    的头像 发表于 02-03 16:35 1120次阅读

    单片机通过USB升级固件的方法

    单片机升级固件的方法有很多中,比如:ISP(在系统编程)、ICP(在电路编程)、IAP(在应用编程)等。
    的头像 发表于 01-11 09:37 1995次阅读
    单片机通过USB升级固件的<b class='flag-5'>方法</b>