ucosiii上电后前几个cpu利用率异常
南京航空航天大学—飞行控制研究所
UCOSIII CPU利用率异常分析
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
乔焱 2016-9
一、问题现象
系统TICK为5ms,CPU利用率查询周期为200ms。如图1所示,在任务中定时200ms打印CPU利用率。
现象:上电后结果如图2所示,发现上电第一个CPU利用率等于100%,运行中仍有CPU利用率等于100%,这两个数据都为异常数据。本报告针对此现象进行分析,并提出相关解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
。
图1 任务定时打印CPU利用率
图2 上电CPU利用率打印结果
南京航空航天大学—飞行控制研究所
二、解决方案
原操作系统层的OSStatTaskCPUUsageInit函数如图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是通过延时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%,会出现100ms不干活,计算出OS_Stat_IdleCtr=990的情况。则OS_Stat_IdleCtr> OS_Stat_IdleCtrMax导致CPU利用率为100%,实际为接近0%的值。在ucosii中会显示超过100%的值在ucosiii中由于加了数据判断保护,CPU利用率<=100%。更改
计划
项目进度计划表范例计划下载计划下载计划下载课程教学计划下载
如下。
1、统计OS_Stat_IdleCtr的延时时间更改dly = (OS_TICK)(OSCfg_TickRate_Hz)延时1s计算1s的OS_Stat_IdleCtr。OSStatTaskCtrMax = OSStatTaskCtr/OSCfg_StatTaskRate_Hz计算需要的设置的CPU周期内OS_Stat_IdleCtr的值。这样OS_Stat_IdleCtr的值变的稳定。但是系统启动时间变长了。
问题2:更改上述代码后,CPU Usage除上电后第一次100%之外不再出现
CPU Usage第一次上电为100%是因为在OSStatTaskCPUUsageInit中为100%。
计算OS_Stat_IdleCtrMax后并没有对OS_Stat_IdleCtr的值进行改变。所以OS_Stat_IdleCtr仍然=OS_Stat_IdleCtrMax,导致OSStatTaskCtrMax > OSStatTaskCtrRun不满足,OSStatTaskCPUUsage = (OS_CPU_USAGE)10000u。导致上电后CPU Usage=100%。更改计划如下。
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
1、在OSStatTaskCPUUsageInit中更改OSStatTaskCtr的赋值为 = OSStatTaskCtrMax-1。这样便能进入CPU Usage的计算。
方法2、更改判断条件为OSStatTaskCtrMax > =OSStatTaskCtrRun。 虽然上电后CPU Usage=100%对统计CPU Usage无影响,但是对OSStatTaskCPUUsageMax产生了影响,导致OSStatTaskCPUUsageMax一直为100%,因为没有值比他大。