范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

嵌入式实操基于RT1170FreeRTOS实现CPU使用率统计(二十四)

  本文主要是通过迁移的思维,记录本人初次使用NXP MCUXpresso SDK API进行BSP开发
  本文主要描述了如何在RT1170平台下,基于FreeRTOS实现CPU使用率的统计
  参考:https://www.fatalerrors.org/a/statistical-analysis-of-cpu-utilization-in-freertos-system.html 1. CPU使用率统计的原理
  第一、想要实现CPU使用率统计,需要一个比系统定时中断粒度更小的中断才能实现CPU使用率的统计,这是前提条件。
  第二、需要在对应的操作系统中进行注册,实现对应的接口即可。 2. CPU使用率统计定时器中断实现
  在本文中使用PIT2来充当这个角色。在PIT2_IRQHANDLER函数中对ulCpuTraceTick进行自加。这个变量后续会使用到。 #include "fsl_debug_console.h" #include "board.h" #include "fsl_pit.h"  #include "pin_mux.h" #include "clock_config.h"   #include "FreeRTOS.h" #include "task.h" #include "string.h" /*----------------------------------------------*  * external variables                           *  *----------------------------------------------*/  /*----------------------------------------------*  * external routine prototypes                  *  *----------------------------------------------*/  /*----------------------------------------------*  * internal routine prototypes                  *  *----------------------------------------------*/  /*----------------------------------------------*  * project-wide global variables                *  *----------------------------------------------*/  /*----------------------------------------------*  * module-wide global variables                 *  *----------------------------------------------*/  const pit_config_t PIT2_config = {   .enableRunInDebug = false };   volatile unsigned int ulCpuTraceTick = 0;  /*----------------------------------------------*  * constants                                    *  *----------------------------------------------*/  /*----------------------------------------------*  * macros                                       *  *----------------------------------------------*/  /* Get source clock for PIT driver */ #define PIT_SOURCE_CLOCK CLOCK_GetRootClockFreq(kCLOCK_Root_Bus) /* Definitions for BOARD_InitPeripheral_PIT2_Ch_0 functional group */ /* BOARD_InitPeripheral_PIT2_Ch_0 defines for PIT2 */ /* Definition of peripheral ID. */ #define PIT2_PERIPHERAL PIT2 /* Definition of clock source frequency. */ #define PIT2_CLK_FREQ 240000000UL /* Definition of channel number for channel 0. */ #define PIT2_CHANNEL_0 kPIT_Chnl_0 /* Definition of ticks count for channel 0. */ //#define PIT2_CHANNEL_0_TICKS 2399999U #define PIT2_CHANNEL_0_TICKS 1199999U /* PIT2 interrupt vector ID (number). */ #define PIT2_IRQN PIT2_IRQn /* PIT2 interrupt handler identifier. */ #define PIT2_IRQHANDLER PIT2_IRQHandler /*----------------------------------------------*  * routines" implementations                    *  *----------------------------------------------*/ /* PIT2_IRQn interrupt handler */ void PIT2_IRQHANDLER(void) {   /*  Place your code here */     /* Clear interrupt flag.*/   PIT_ClearStatusFlags(PIT2_PERIPHERAL, PIT2_CHANNEL_0, kPIT_TimerFlag);   ulCpuTraceTick++;   /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F      Store immediate overlapping exception return operation might vector to incorrect interrupt. */   #if defined __CORTEX_M && (__CORTEX_M == 4U)     __DSB();   #endif }  void PIT2_init(void) {   /* Initialize the PIT. */   PIT_Init(PIT2_PERIPHERAL, &PIT2_config);   /* Set channel 0 period to 1 s (240000000 ticks). */   PIT_SetTimerPeriod(PIT2_PERIPHERAL, PIT2_CHANNEL_0, PIT2_CHANNEL_0_TICKS);   /* Enable interrupts from channel 0. */   PIT_EnableInterrupts(PIT2_PERIPHERAL, PIT2_CHANNEL_0, kPIT_TimerInterruptEnable);   /* Enable interrupt PIT2_IRQN request in the NVIC */   EnableIRQ(PIT2_IRQN);   /* Start channel 0. */   PIT_StartTimer(PIT2_PERIPHERAL, PIT2_CHANNEL_0); } 3. 操作系统接口注册
  在FreeRTOSConfig.h做如下配置  /* Run time and task stats gathering related definitions. */ -#define configGENERATE_RUN_TIME_STATS           0 +#define configGENERATE_RUN_TIME_STATS           1  #define configUSE_TRACE_FACILITY                1  #define configUSE_STATS_FORMATTING_FUNCTIONS    1  + +extern volatile unsigned int ulCpuTraceTick; + +#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()     (ulCpuTraceTick = 0ul) +#define portGET_RUN_TIME_COUNTER_VALUE()             ulCpuTraceTick
  编译函数接口打印CPU使用率: uint8_t CPU_RunInfo[400];       //保存任务运行时间信息 //ref https://www.jianshu.com/p/cc4b948c7741 void CPU_Task(void* parameter) {         PRINTF("CPU_Task r ");     while (1)     {         memset(CPU_RunInfo,0,400);              //信息缓冲区清零          vTaskList((char *)&CPU_RunInfo);  //获取任务运行时间信息          PRINTF("---------------------------------------------r ");         PRINTF("任务名      任务状态 优先级   剩余栈 任务序号r ");         PRINTF("%s", CPU_RunInfo);         PRINTF("---------------------------------------------r ");          memset(CPU_RunInfo,0,400);              //信息缓冲区清零          vTaskGetRunTimeStats((char *)&CPU_RunInfo);          PRINTF("任务名       运行计数         利用率r ");         PRINTF("%s", CPU_RunInfo);         PRINTF("---------------------------------------------r  ");         vTaskDelay(1000);   /* 延时500个tick */      //         PRINTF("CPU_Task r ");                 } } 4. 验证
  通过创建任务实现CPU使用率的统计:         extern  void CPU_Task(void* parameter);         stat = xTaskCreate(CPU_Task, "CpuTask", configMINIMAL_STACK_SIZE + 5000, NULL, tskIDLE_PRIORITY + 1, NULL);     if (pdPASS != stat)     {         PRINTF("Failed to create awtk task");         while (1)             ;     }
  实际效果如下所示: --------------------------------------------- 任务名      任务状态 优先级   剩余栈 任务序号 CpuTask         X       1       5016    2 TestTask        R       1       11952   1 IDLE            R       0       79      4 bsp_can_t       B       2       12069   3 Tmr Svc         B       17      153     5 --------------------------------------------- 任务名       运行计数         利用率 TestTask        1856            97% CpuTask         40              2% IDLE            0               <1% bsp_can_t       0               <1% Tmr Svc         0               <1% ---------------------------------------------  --------------------------------------------- 任务名      任务状态 优先级   剩余栈 任务序号 CpuTask         X       1       5008    2 TestTask        R       1       11952   1 IDLE            R       0       79      4 bsp_can_t       B       2       12069   3 Tmr Svc         B       17      153     5 --------------------------------------------- 任务名       运行计数         利用率 TestTask        2088            99% CpuTask         48              2% IDLE            0               <1% bsp_can_t       0               <1% Tmr Svc         0               <1% ---------------------------------------------  --------------------------------------------- 任务名      任务状态 优先级   剩余栈 任务序号 CpuTask         X       1       5008    2 TestTask        R       1       11952   1 IDLE            R       0       79      4 bsp_can_t       B       2       12069   3 Tmr Svc         B       17      153     5 --------------------------------------------- 任务名       运行计数         利用率 TestTask        2320            100% CpuTask         53              2% IDLE            0               <1% bsp_can_t       0               <1% Tmr Svc         0               <1% --------------------------------------------- 4. 总结
  开启CPU使用率统计存在如下两个问题:
  第一: 最大统计时间。
  第二: 占用CPU资源。
  欢迎订阅
  " 嵌入式实操 "是一个分享开发实践经验的地方。
  文章会同时发布到我的 CSDN主页(嵌入式实操的博客_CSDN博客-06--Am335x,01--RT1052 Aworks 开发,05-RT1170 开发领域博主)、 今日头条号平台上。

买排骨,前排中排后排口感差别挺大,弄懂了再买心里有底因为家庭成长环境因素的影响,我对猪肉牛羊肉等肉类食材的各个部位的名称,可以说是非常的欠缺,大致上我只知道五花肉里脊肉猪脊骨排骨,具体细分我就说不太清楚了,最重要的是,在超市看着肉摊央行行长易纲货币政策的首要目标是稳价格和稳就业中国人民银行大楼。新华社发中国人民银行行长易纲日前表示,中国货币政策的首要目标是稳价格和稳就业。人民银行将继续加大对中小微企业的普惠金融支持力度,有效帮助中小微企业维护就业稳定。随油价调整消息今天4月22日,调整后加油站9295号汽油零售价格今天是2022年4月22日,国内成品油调价窗口稳定运行,本轮调价与过去几次不同,调价周期相对较短,第八轮成品油调价将于4月28日晚24时进行,告诉大家一个不好的消息,刚刚下跌的油价realme真我Q5Pro和realmeGTNeo2,价格一样如何选择?realme真我Q5Pro其实就是realmeGTNeo2的换壳版本,两个手机的三围体重基本一致realmeQ5Pro机身重量194。5g宽度75。8mm厚度8。65mm长度162不该吃的东西别吃现在越来越多的人注重养生,随之而来的就是大家都有了各自不该吃的东西。那么,什么东西不该吃?怎么算该不该吃?大多数人都是自己从网络上自行理解的该不该吃的食物。每个人的体质不同,口味不俄乌冲突让美军学到啥?五角大楼官员认为战争中有样东西比钢铁大炮更重要安225被火力摧毁据美国防务新闻网站报道,根据五角大楼联合人工智能中心主任的说法,俄罗斯对邻国乌克兰的持续攻击揭示了战争的演变状态,为美国提供了可以用来了解其自身防御态势的见解。4森海塞尔推出SportTrueWireless耳机IP54防水防尘,价格129。95美元森海塞尔(Sennheiser)宣布,推出一款名为SportTrueWireless的新款真无线耳机,可以为健身爱好者和运动员带来卓越的音频效果。森海塞尔运动产品经理DavidHo202224今日尿素价格行情走势本周国内尿素高位震荡调整。目前主流出厂价格在28502950元吨左右。据中国氮肥工业协会2022年4月19日调查,全国尿素日产量16。17万吨,与上周同期相比上涨3。03,同比上涨买排骨,前排中排后排口感差别挺大,弄懂了再买心里有底因为家庭成长环境因素的影响,我对猪肉牛羊肉等肉类食材的各个部位的名称,可以说是非常的欠缺,大致上我只知道五花肉里脊肉猪脊骨排骨,具体细分我就说不太清楚了,最重要的是,在超市看着肉摊央行行长易纲货币政策的首要目标是稳价格和稳就业中国人民银行大楼。新华社发中国人民银行行长易纲日前表示,中国货币政策的首要目标是稳价格和稳就业。人民银行将继续加大对中小微企业的普惠金融支持力度,有效帮助中小微企业维护就业稳定。随油价调整消息今天4月22日,调整后加油站9295号汽油零售价格今天是2022年4月22日,国内成品油调价窗口稳定运行,本轮调价与过去几次不同,调价周期相对较短,第八轮成品油调价将于4月28日晚24时进行,告诉大家一个不好的消息,刚刚下跌的油价
明天,我将退休明天,就要退休了。轻轻地擦拭着电脑,默默地和朝夕相处的伙伴告别。拿起新毛巾,最后一次拂过椅桌,拭去生活的烙印,留下无言的诉说。背上双肩包,悄悄地走了,谢绝送行的美酒泪涌的分别。静静该怎样形容如今的社会呢?如今的社会1英雄让美女废了2美女让大款废了3帅哥让富婆废了4婚姻让小三废了5孩子让手机废了6梦想让现实废了7青春让工作废了8QQ成了摆设9微信成了支付10电话为了收快递11短信为了这座18线海滨老城,比三亚安静!更是国内宜居城市Top1中华民族长子山东,是中国果蔬种植大省,几乎供养了半个中国,这里的蔬菜水果水产品,产量均居全国第一。这里还坐拥中国16的最美海岸线,有中国最美海滨城市,中国最美海岛最美的海滩。山东就海关总署今年前10个月我国进出口同比增长9。5央视新闻客户端海关总署今天(7日)公布,今年前10个月,我国外贸进出口总值34。62万亿元,同比增长9。5,外贸继续保持平稳运行。海关统计显示,今年前10个月,我国外贸进出口总值3我国新能源汽车具备国际竞争力来源经济日报发展新能源汽车是我国从汽车大国迈向汽车强国的必由之路,是应对气候变化推动绿色发展的战略举措。2020年11月,国务院办公厅印发新能源汽车产业发展规划(20212035年可重复使用试验航天器公开,我国也有航天飞机,真要搞太空旅游?2020年9月4日和2022年8月5日,我国曾两次成功发射可重复使用试验航天器,特别是8月5日发射的那架,至今还在太空,已经在轨飞行3个月了,可以媲美美国X37B。而该可重复使用试我国成功发射中星19号卫星11月5日19时50分,我国在西昌卫星发射中心成功将中星19号卫星发射升空,卫星顺利进入预定轨道,发射任务获得圆满成功。ChinasendstheChinaSat19satelli食品调理疾病?中冠健康公司旗下中冠肽虚假宣传运营模式涉嫌传销文章来源投融新资讯,版权归原作者,如有侵权,联系删除,转载请注明出处,特此鸣谢!投融新资讯消息近几年来,大健康产业异军突起,越来越多的健康产品开始步入市场,与小分子肽相关的产品开始看到问题的本质,就是真相教父里面有这样一句话半秒钟看清事物本质和一辈子都看不清本质的人,命运注定会是不同的。教父曾经教导爱子,永远不要让别人知道你在想什么。当你能看透别人的思绪,别人对你却无法参透时,你就人生在世,心随运缘,青丝一晃到白头,泣血求名利,何必?人生在世,心随运缘,青丝一晃到白头,泣血求利蒙心求名,何必?悟(二)人间船头迎风逆流上,扬帆无用帮倒忙。白发扶犁惜耕牛,鞭打老驴是少年。钱丰子孙多不贤,贫家儿郎尽孝难。石崇斗法满门青春,当以奋进为底色来源人民网观点频道青年之文明,奋斗之文明,也与境遇奋斗,与时代奋斗。故青年者,人生之玉,人生之春,人生之华也。在最宝贵的年华里,乘风破浪,披荆斩棘,朝着心中之所想所向所梦奋勇启航,