atbf中imu数据的读取与处理方式

一、说明

本文为作者在阅读atbf源码的过程中,对atbf中imu数据的读取和处理方式的个人理解,可能存在不对之处,意在抛砖引玉,请各位老师多多指正;

二、数据读取流程图

1、target

NEUTRONRCF435SE
不同的target所定义的一些功能稍有不同,比如是否使用外部中断,是否使用dma等

2、imu型号

icm42688
与target同理,不同的imu的型号也会有不同的处理方式,所以这里说明指定的型号;

3、imu读取流程图

atbf中imu数据的读取与处理方式_第1张图片

三、存在的疑问

(1)后台程序是否知道imu数据被更新?

推断:否
由于dataReady的这个标志位没有程序在check,所以后台程序并不知道imu数据被更新;
atbf中imu数据的读取与处理方式_第2张图片

(2)后台程序是否每次在imu触发中断之后获取imu数据?

推断:否
下面是mpuGyroReadSPI函数的部分截图,也是每次后台任务调度器最终调取imu read函数,这个函数只是从内存拷贝了imu的原始数据;
而调度器调用imu read与imu触发中断完全是异步的;
atbf中imu数据的读取与处理方式_第3张图片

(3)每次pid循环过程中,是否获取最新的imu数据;

推断:是
虽然中断和read是异步,但是内存中时刻存放的都是最新的imu数据;
每次任务调度器需要运行pid时,就去内存中捞取imu数据;
而捞取到的imu数据的时间戳,就是距离运行pid时间最近的一次时间戳,从而保证了控制的实时性;

(4)如何实现imu数据的内存保护?

补充:imu数据的内存一方面被dma填充新的数据,另一方面又会被imu read函数去读取数据;
那么如何保证一方在操作同一块内存地址时完成之前,被另一方打断呢?

你可能感兴趣的:(stm32)