|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2011-10-19 12:33:43
|
显示全部楼层
问题找到了,在rt_kprintf()
sprintf转换三个浮点数 用了300~500us不等,这个不足以影响系统。
但是如果转换完成后输出,马上就变成 7749us 至8065 us
yaw = 2.3 roll = 4.2 prith = -3.4
姿态计算 耗时: 7749 us
yaw = 2.3 roll = 4.2 prith = -3.5
姿态计算 耗时: 7704 us
yaw = -151.6 roll = -120.8 prith = -52.5 //角度偏差大的时候sprintf转换更耗时
姿态计算 耗时?8065 us
7.7ms 已经大大超过整个系统周期4ms了
看来我要早点写好发送线程,丢掉串口助手了,不能再用rt_kprintf做输出了
但是就上面的时间测试来说,数据采集,初步的滤波 ,然后单精度计算四元数,用STM32可以做得很好,整个过程不超过1ms
不知道卡尔曼滤波加上之后如何。我预计应该在1ms内能完成卡尔曼滤波的计算。
如果都可以做到,全单精度浮点计算,用STM32是没什么压力,只做姿态的话,应该可以上500HZ。
以下是测试的源代码
start_measure_time(); //开始计时
#ifdef print_posture
if(acc.count % 16 == 1) //调试时输出数据
{
sprintf(f_buf1, "%5.1f ", final_angle.fYaw *180/ONE_PI);
sprintf(f_buf2, "%5.1f ", final_angle.fRoll *180/ONE_PI);
sprintf(f_buf3, "%5.1f ", final_angle.fPitch*180/ONE_PI);
rt_kprintf("\nyaw = %s roll = %s prith = %s ", f_buf1, f_buf2, f_buf3);
}
#endif
mb_temp = (int)stop_measure_time(); //结束计时
rt_kprintf("\n姿态计算 耗时:%5d us",mb_temp);
} |
|