正点原子MiniFly V1.2学习笔记五---sensorsTask

  这里先学习第8个任务sensorsTask,2,3,6,7任务后面再学,先学重要的。

  xTaskCreate(sensorsTask, "SENSORS", 450, NULL, 4, NULL);	//传感器处理任务

一、任务函数

正点原子MiniFly V1.2学习笔记五---sensorsTask_第1张图片
看一下上面用到的sensors变量的定义:
正点原子MiniFly V1.2学习笔记五---sensorsTask_第2张图片
任务的流程:
  先初始化I2C,初始化传感器----->进入循环,等待传感器中断发送二值信号量------>得到信号量后读取传感器数据到buffer数组中---->处理buffer数据得到加速度,陀螺仪,磁力,气压等,然后把它们各自入到自己的队列中。

二、任务的第一个调用sensorsInit();

正点原子MiniFly V1.2学习笔记五---sensorsTask_第3张图片
正点原子MiniFly V1.2学习笔记五---sensorsTask_第4张图片
  初始化传感器。创建了一个二值信号量sensorsDataReady,初始化全局变量gyroBiasRunning,初始化全部传感器,初始化PA4为引脚中断EXTI4。当传感器数据准备好时,会产生中断。中断中释放二值信号量。在任务循环中获取二值信号量,然后读取传感器。
(二值信号量与互斥信号量的区别参考: https://www.cnblogs.com/yangguang-it/p/7215858.html)

三、变量gyroBiasRunning

  结构体的名字 Axis3f—表示3轴,每轴的数据是f型,即表示3个f型数据
Axis3i16----表示3轴,3个int16数据
正点原子MiniFly V1.2学习笔记五---sensorsTask_第5张图片
正点原子MiniFly V1.2学习笔记五---sensorsTask_第6张图片
正点原子MiniFly V1.2学习笔记五---sensorsTask_第7张图片

四、i2cdevInit(I2C1_DEV)

  参数是宏
在这里插入图片描述
  相当于i2cdevInit( &sensorsBus ),变量sensorsBus被定义为I2cDrv类型,看上面typedef,与I2C_Dev 等同
正点原子MiniFly V1.2学习笔记五---sensorsTask_第8张图片
  再来看一下I2cDrv是什么类型
正点原子MiniFly V1.2学习笔记五---sensorsTask_第9张图片
正点原子MiniFly V1.2学习笔记五---sensorsTask_第10张图片
  这里定义有点复杂: 定义一个I2C结构体变量sensorsBusDef,并对它赋初值----->该变量的地址赋给了结构体变量sensorsBus的def元素------>再把sensorsBus的地址赋给宏I2C1_DEV。所以当I2C1_DEV传递给型参dev时,dev–>def 即是I2C结构体变量sensorsBusDef。
  所以i2cdevInit(I2C1_DEV);只是把I2C1的引脚初始化,并初始化DMA和创建了一个二值信号量和一个互斥信号量。
正点原子MiniFly V1.2学习笔记五---sensorsTask_第11张图片

你可能感兴趣的:(FreeRTOS,STM32)