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

11 篇文章 25 订阅

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

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

一、任务函数

在这里插入图片描述
看一下上面用到的sensors变量的定义:
在这里插入图片描述
任务的流程:
  先初始化I2C,初始化传感器----->进入循环,等待传感器中断发送二值信号量------>得到信号量后读取传感器数据到buffer数组中---->处理buffer数据得到加速度,陀螺仪,磁力,气压等,然后把它们各自入到自己的队列中。

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

在这里插入图片描述
在这里插入图片描述
  初始化传感器。创建了一个二值信号量sensorsDataReady,初始化全局变量gyroBiasRunning,初始化全部传感器,初始化PA4为引脚中断EXTI4。当传感器数据准备好时,会产生中断。中断中释放二值信号量。在任务循环中获取二值信号量,然后读取传感器。
(二值信号量与互斥信号量的区别参考: https://www.cnblogs.com/yangguang-it/p/7215858.html)

三、变量gyroBiasRunning

  结构体的名字 Axis3f—表示3轴,每轴的数据是f型,即表示3个f型数据
Axis3i16----表示3轴,3个int16数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、i2cdevInit(I2C1_DEV)

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

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值