英创信息技术WinCE检测CPU负载及内存占用介绍

描述

通过CPU负载信息,可以判断程序运行环境是否稳定,帮助分析程序中是否有死循环,造成系统变慢。

通过内存使用信息,可以评估程序内存占用情况,帮助分析程序中是否有内存泄漏的情况。

客户在开发初期,可能经常需要用到以上功能,英创提供一个简单的例程实现以上功能。

CPU负载检测

通过GetTickCount获得系统时间读数,通过GetIdleTime获得CPU空闲时间读数,通过计算它们之间的百分比,就可以获得CPU的负载。代码如下:
DWORD m_dwStartTick;
DWORD m_dwEndTick;
DWORD m_dwStartIdle;
DWORD m_dwEndIdle;
m_dwStartTick = GetTickCount();
m_dwStartIdle = GetIdleTime();
// Sleep(1000);
DWORD dwCpuIdle;
m_dwEndTick = GetTickCount();
m_dwEndIdle = GetIdleTime();
dwCpuIdle = ((100*(m_dwEndIdle - m_dwStartIdle)) / (m_dwEndTick - m_dwStartTick));
RETAILMSG(1, (L'CPU:%d%%\r\n', 100 - dwCpuIdle));

内存占用检测

CE中,内存一部分分配给系统使用,一部分分配给用户程序使用,这个分配的比例可以通过userinfo.txt配置文件中的Store字段来分配。
[SYSTEM]
Store='15'


这里的15表示内存15%大小分配给系统使用,剩下85%分配给用户程序使用。详情请参考光盘《使用必读》文档。

通过函数GlobalMemoryStatus,可以获得分配给用户程序的内存大小(字节为单位),及目前空余的大小。
MEMORYSTATUS memstatus;
GlobalMemoryStatus(&memstatus);
STORE_INFORMATION storeinfo;
GetStoreInformation(&storeinfo);
RETAILMSG(1, (L'MEM:%d%%\r\nuser: total%8dKB\r\n used%8dKB\r\n',
memstatus.dwMemoryLoad,memstatus.dwTotalPhys/1024,(memstatus.dwTotalPhys-memstatus.dwAvailPhys)/1024);
通过函数GetStoreInformation,可以获得分配给系统的内存大小(字节为单位),及目前空余的大小。
STORE_INFORMATION storeinfo;
GetStoreInformation(&storeinfo);
RETAILMSG(1, (L'system:total%8dKB\r\n used%8dKB\r\n\r\n',
storeinfo.dwStoreSize/1024, (storeinfo.dwStoreSize-storeinfo.dwFreeSize)/1024));
例程说明

运行程序,程序会周期性读取CPU占用率及内存占用信息,显示在界面中。

嵌入式主板

同时将信息打印到DEBUG调试串口,方便无显示屏主板使用。

嵌入式主板

该程序不会占用太多CPU资源及内存,可以放到后台运行。

例程及源码已包含在最新的开发光盘中,客户也可以联系英创工程师获得。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分