2021-08-23里程精度BUG

项目场景:

延锋仪表项目ODO总计里程功能

问题描述:

总计里程计算精度不达标

原因分析:

总 里 程 S = ∫ 0 t V ( t )   d t 总里程S = \int_0^t {V(t)} \,{\rm d}t S=0tV(t)dt
函数周期为20ms,也就是积分时间 t 整车速度单位为KM/h 导致要把时间单位统一
ms换算为h需要除以180 000 这样就引入了除法,导致精度丢失严重;

解决方案:

核心思想:把除法转换为减法:在while循环里面减去除数,每减去一次商就++

代码如下:

            v1 = v1 + spd.vehspd1; /*20210628 yc add */
            while(v1 >= 180)
            {
                v1 = v1-180;
				l_l_odo_count_u32++;
            }				
			if(l_l_odo_count_u32 > l_l_odo_count_backup_u32)
			{
				odo_delet_u16 = (uint16)(l_l_odo_count_u32 - l_l_odo_count_backup_u32);
			}
            else
            {
				odo_delet_u16 = (uint16)(0xFFFFFFFF-l_l_odo_count_backup_u32 +l_l_odo_count_u32 +(UINT32)1);
			}
			l_odo_count_u16 = l_odo_count_u16 + odo_delet_u16;
			if(l_odo_count_u16 > 65535)
			{
				l_odo_count_u16 = 0;
            }
			l_l_odo_count_backup_u32 = l_l_odo_count_u32;
			
			 Rte_Write_ppSR_TIOdoLogicMdl2OdoMdl_NewRollingOdo(l_odo_count_u16);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值