高级会员
- 积分
- 935
- 金钱
- 935
- 注册时间
- 2017-12-11
- 在线时间
- 196 小时
|
发表于 2018-9-27 21:43:49
|
显示全部楼层
本帖最后由 wlq390934605 于 2018-9-27 21:56 编辑
我做那个干嘛, 那个电机, 找个图用眼一看, 用笔一算就出来了, 这说明你不够专业;;
给你个参考, 硬件频率太高, 可能不够用, 软件法, 卡尔曼你架设不了, 给你这个, 作用:放入代码不用管,就能自动算帧率并返回, 无需注意触发时间是否均匀, 用的就是先进先出;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////;
;
/**************************************************************************************************************************/
static u32 SYS_Frame_Timer[2] = {0,0}, SYS_Frame_Lock = 0, SYS_Frame_i = 1;
static u32 SYS_Frame_Frame[6] = {0, 0, 0, 0, 0};
/**************************************************************************************************************************/
//帧率自动统计
//return : 帧率; 0.01-xxx;
/*** SYTEM_FrameRate() ***/
float SYSTEM_FrameRate(void)
{
OS_ERR err;
SYS_Frame_Timer[0] = OSTimeGet(&err);
if(SYS_Frame_Timer[0] - SYS_Frame_Timer[1] == 0) return 0; //除数为零跳出, 防止VStudio 报错
SYS_Frame_Frame[0] = (1000*100)/(SYS_Frame_Timer[0] - SYS_Frame_Timer[1]); //实时帧率, 不参与显示更新;
SYS_Frame_Timer[1] = SYS_Frame_Timer[0];
if(SYS_Frame_Lock++ >(SYS_Frame_Frame[0]/(100*10)) || SYS_Frame_Timer[0] <10) //更新速率锁(100ms每次) || 低速不使用
{
SYS_Frame_Lock = 0;
SYS_Frame_Frame[SYS_Frame_i++] = SYS_Frame_Frame[0]; //先入先出, 平均算法缓冲区;
if(SYS_Frame_i > 5) SYS_Frame_i = 1;
}
return (float)((SYS_Frame_Frame[1]+SYS_Frame_Frame[2]+SYS_Frame_Frame[3]+SYS_Frame_Frame[4]+SYS_Frame_Frame[5])/5)/100;
}
/**************************************************************************************************************************/
|
|