《UCOSIII上电后前几个CPU利用率异常》由会员分享,可在线阅读,更多相关《UCOSIII上电后前几个CPU利用率异常(3页珍藏版)》请在金锄头文库上搜索。
1、本文格式为Word版,下载可任意编辑UCOSIII上电后前几个CPU利用率异常 南京航空航天大学飞行操纵研究所 UCOSIII CPU利用率奇怪分析报告 乔焱 2022-9 一、问题现象 系统TICK为5ms,CPU利用率查询周期为200ms。如图1所示,在任务中定时200ms打印CPU利用率。 现象:上电后结果如图2所示,察觉上电第一个CPU利用率等于100%,运行中仍有CPU利用率等于100%,这两个数据都为奇怪数据。本报告针对此现象举行分析,并提出相关解决方案。 图1 任务定时打印CPU利用率 图2 上电CPU利用率打印结果 南京航空航天大学飞行操纵研究所 二、解决方案 原操作系统层的O
2、SStatTaskCPUUsageInit函数如图3所示,修改后应如图4所示,标黑片面即为修改的代码。 图3 原OSStatTaskCPUUsageInit()函数 图4修改后OSStatTaskCPUUsageInit()函数 三、问题理由 问题1:在main函数运行OSStart函数之后,操作系统开头举行任务TaskStart的调度。在TaskStart中调用OSStatTaskCPUUsageInit对CPU利用率举行初始化。CPU Usage (%) = 100 *(1-OS_Stat_IdleCtr/OS_Stat_IdleCtrMax)。源代码中OS_Stat_IdleCtr 是通
3、过延时 dly = (OS_TICK)(OSCfg_TickRate_Hz / OSCfg_StatTaskRate_Hz)个Tick,若OSCfg_StatTaskRate_Hz设置为10,那么CPU 南京航空航天大学飞行操纵研究所 查询周期为100ms,即统计100ms的空闲任务OS_Stat_IdleCtr。由于时间太短可能导致每次计数误差。例如:真正CPU利用率为0%时,100ms内OS_Stat_IdleCtr的值为1000。但在实际上CPU在OSStatTaskCPUUsageInit任务中只算了980,由于此程序并没有其他任务执行,空系统在跑,CPU利用率接近0%,会展现100m
4、s不干活,计算出OS_Stat_IdleCtr=990的处境。那么OS_Stat_IdleCtr OS_Stat_IdleCtrMax导致CPU利用率为100%,实际为接近0%的值。在ucosii中会显示超过100%的值在ucosiii中由于加了数据判断养护,CPU利用率 OSStatTaskCtrRun不得志,OSStatTaskCPUUsage = (OS_CPU_USAGE)10000u。导致上电后CPU Usage=100%。更改筹划如下。 方法1、在OSStatTaskCPUUsageInit中更改OSStatTaskCtr的赋值为 = OSStatTaskCtrMax-1。这样便能进入CPU Usage的计算。 方法2、更改判断条件为OSStatTaskCtrMax =OSStatTaskCtrRun。 虽然上电后CPU Usage=100%对统计CPU Usage无影响,但是对OSStatTaskCPUUsageMax产生了影响,导致OSStatTaskCPUUsageMax一向为100%,由于没有值比他大。 3