【Pixhawk】注册一个字符型驱动设备

2023-05-16

最近学习Pixhawk的SPI,本以为PX4是STM32单片机而已, 写个SPI驱动应该很简单。但是当我看到mpu9250的那些cpp文件,我一下就蒙了。由于PX4用的NUTTX系统,类似Linux,所以一切都不是裸代码,操作寄存器那么单纯。它还封装了文件系统的概念。哎。。。不懂C++, 不懂Linux, 只有慢慢啃吧!!!!



先从大神的一篇博客入门:

Pixhawk原生固件PX4之MPU6000驱动分析

http://blog.csdn.net/oqqENvY12/article/details/70039527


相信看完之后还是不知所以然,其实实现字符型设备注册的过程就是在mpu6000.cpp 里的(MPU6000_SPI.CPP其实是初始化总线的)

/**
 * start driver for a specific bus option
 */
bool
start_bus(struct mpu6000_bus_option &bus, enum Rotation rotation, int range, int device_type)
{
int fd = -1;


if (bus.dev != nullptr) {
warnx("%s SPI not available", bus.external ? "External" : "Internal");
return false;
}


device::Device *interface = bus.interface_constructor(bus.busnum, device_type, bus.external);   //SPI总线实例化


if (interface == nullptr) {
warnx("no device on bus %u", (unsigned)bus.busid);
return false;
}


if (interface->init() != OK) {  //这里初始化SPI总线,和文件系统无关,先不理会
delete interface;
warnx("no device on bus %u", (unsigned)bus.busid);
return false;
}


bus.dev = new MPU6000(interface, bus.accelpath, bus.gyropath, rotation, device_type); //这里才是和文件系统相关的


if (bus.dev == nullptr) {
delete interface;
return false;
}


if (OK != bus.dev->init()) {        //这里其实是调用CDev::init() 这个函数实现字符型驱动注册,需要3个参数,名称“MPU6000”,路径“/dev/mpu6000_accel”(可以在//nsh>cd dev 看到),"irq 不懂干什么,实际也没有 赋值"(字面意思是中断)
goto fail;
}


/* set the poll rate to default, starts automatic data collection */


fd = open(bus.accelpath, O_RDONLY);//注册驱动之后,可以调用open()打开驱动,fd是这个文件的句柄。Linux里 设备=文件 。。。


if (fd < 0) {
goto fail;
}


if (ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT) < 0) { //之后可以进行ioctl() read() write() 等操作,为什么??因为注册驱动 的时候,已经将fd的句//柄和MPU6000::ioctl MPU6000::read MPU6000::write(C++   这些函数是重写基类CDev //的) 所以这里其实等价于  bus.dev->ioctl(.....)
goto fail;
}


if (ioctl(fd, ACCELIOCSRANGE, range) < 0) {
goto fail;
}


close(fd);


return true;


fail:


if (fd >= 0) {
close(fd);
}


if (bus.dev != nullptr) {
delete bus.dev;
bus.dev = nullptr;
}


return false;
}



//如果不懂C++,按照C的思维是看不明的,主要是类的继承,类成员函数的重写,覆盖,动态绑定需要知道

//以上写的比较乱


>>>>>>>>>>>>>接下来记录SPI的初始化步骤,以后补充

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Pixhawk】注册一个字符型驱动设备 的相关文章

  • Pixhawk之UAV控制理论、ardupilot源码框架介绍

    一 开篇 您有无人机么 xff1f 没有 那赶紧去某宝买一套 昨天 开会开到接近下午一点钟 xff0c 收获相当大 xff0c 原本不太清楚的ardupilot框架现在也大致熟悉了 xff0c 接下来主要就是结合源码了解其控制过程了 xff
  • Pixhawk之姿态解算篇(4)_补充篇

    一 开篇 大家期待已久的第四篇来了 xff0c 但是本篇可能比较水啊 见谅 首先 xff0c 上一周没有什么收获 xff0c 虽然看了不少的论文 xff0c 但是却没有什么质的飞越 看的论文都是关于姿态解算的 xff0c 用的算法大部分也都
  • Pixhawk之学习杂谈

    一 开篇 距离上一篇博文已经很久了 xff0c 最近主要就是参加了几家公司的电话面试 xff0c 思考了一些问题 xff0c 本身就是半路杀进无人机领域的门外汉 对整个飞行控制部分理解的也是皮毛的皮毛 xff0c 经过几家面试之后 xff0
  • Pixhawk之姿态控制篇(2)_控制策略

    一 开篇 写在前面 xff1a 先占坑 现在关于该部分内部还在完善 xff0c 后续不上 三 实验平台 Software Version xff1a PX4Firmware Hardware Version xff1a pixhawk ID
  • PIXHAWK飞控固件及代码基础介绍

    PIXHAWK飞控 xff1a 固件 xff1a 开源固件PIXHAWK 软件 xff1a 两套固件代码 xff08 1 xff09 原生固件代码PIX4 xff0c 地面站采用QGC xff08 界面比较合理清晰 xff0c 易做修改 x
  • PX4/Pixhawk---uORB深入理解和应用(最新版)

    1 简介 ps 第1章简介是参考 uORB深入理解和应用 1 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c 这可以让我们更好的理解PX4 Pixhawk的软件架构和运作 xff
  • PIXHAWK飞机侧翻原因

    转载自 xff1a http pix 1yuav com wen ti ji jin fei ji ce fan yuan yin html 飞机侧翻原因 飞机侧翻有以下几个原因 xff0c 请认真检查 1 电机顺序 xff0c 电机转向
  • pixhawk似乎也是用的四环串级

    pixhawk似乎也是用的四环串级 https blog csdn net sinat 16643223 article details 106973618 阿木社区的pixhawk的课里 https bbs amovlab com plu
  • 在PX4下更换pixhawk的IMU

    写在前面 出于一些原因 xff0c 这篇文章不给出具体的源码 xff0c 因此博主试着将这篇写成了一篇科普性质的文章 xff0c 如果你认真读的话 xff0c 应该会有收获的 为什么要更换pixhawk的传感器 xff1f 大多数的玩家拿到
  • apm、pixhawk、pixhack飞控航拍后pos数据提取流程

    apm pixhawk pixhack飞控pos数据提取流程 下载日志 打开log分析 区域omap地图验证 验证之前将log文件使用mission planner进行kml验证 筛选相机pos坐标 xff08 选择CAM xff09 很重
  • PIXHAWK添加自定义消息存储到SD卡

    四旋翼调试阶段总会出现很多难以预见的现象 xff0c 这时为了找到所出问题的原因 xff0c 就需要获得原始相关数据进行分析 xff0c pixhawk代码提供了记录飞行日志的功能 xff0c 能够将飞行中的重要数据存入SD卡中 xff0c
  • Pixhawk学习7——位置解算

    Pixhawk的位置解算分为两部分 xff0c 第一部分主要为传感器的数据获取 xff0c 而该部分最主要的就是GPS数据的提取 第二部分为与惯性器件之间的组合导航 组合导航的好处我就不用多说了 Pixhawk代码中目前主要有两处组合导航的
  • 转载:Pixhawk源码笔记八:添加新的参数

    转载 xff1a 新浪 64 WalkAnt 第九部分 添加新的参数 英文参考 xff1a http dev ardupilot com wiki code overview adding a new parameter 本节源自 xff1
  • pixhawk make文件分析

    由于笔者没学过Linux等系统 xff0c 对make文件所知甚少 xff0c 本节分析可能有大量错误 xff0c 只提供参考 xff0c 随着技术积累 xff0c 以后会回过头改正错误的地方 xff0c 也非常欢迎提出指导意见 其中分析大
  • pixhawk PX4FMU和PX4IO最底层启动过程分析

    首先 xff0c 大体了解PX4IO 与PX4FMU各自的任务 PX4IO STM32F100 为PIXHAWK 中专用于处理输入输出的部分 输入为支持的各类遥控器 PPM SPKT DSM SBUS 输出为电调的PWM 驱动信号 它与PX
  • pixhawk mc_pos_control.cpp源码解读

    好久没跟新blog了 xff0c 这段时期边调试边看程序 xff0c 所以有点慢 要开始着手调试了 这篇blog是顺着上一篇pixhawk 整体架构的认识写的 xff0c 接下来看程序的话 xff0c 打算把各个功能模块理解一遍 xff0c
  • pixhawk px4 spi设备驱动

    此篇blog是以nuttx官网介绍为出发点 xff0c 先分析如何初始化的 xff0c 再分析如何读取传感器数据的 xff0c 最后对比了字符型设备操作和spi驱动的实现方式的差别 如有错误还请指正 6 字符型设备 所有的结构体和API都在
  • F450机架 Pixhawk飞控实现自动避障(2019.11.29)

    之前进行无人机项目 xff0c 实现避障 巡航 定点 航拍等功能 xff0c 项目结束 xff0c 在这里进行分享经验 xff0c 项目所用器件为自己使用的 xff0c 仅供参考 xff0c 实际实现须结合自己实际情况 1 传感器选择 权盛
  • DroneKit教程(二):控制Pixhawk示例

    DroneKit教程 xff08 二 xff09 xff1a 控制Pixhawk示例 本篇提供了一个简单的示例 xff0c 配以详细的注释说明不同语句的功能 xff0c 希望能给各位一个总体的框架和印象 该示例文件改写自DroneKit的官
  • 步骤五:PIXHAWK遥控器的使用

    采用福斯i6s遥控 1 连接飞控 打开遥控器 xff0c 接收机插上飞控 xff0c 再插上送的短接线 xff0c 进行匹配对码RX 2 遥控器长按两秒锁 xff0c system output mode Output mode按照图片这样

随机推荐

  • pip安装baidu-aip的方法

    记住你以后就有名字啦 万能小p xff1a pip install baidu aip i http pypi douban com simple trusted host pypi douban com 中间错误是这样的 xff1a Co
  • 计算机网络习题集_主打选择填空

    计算机网络习题 计算机网络习题第一章 概述第二章 物理层第三章 数据链路层第四章 网络层第五章 运输层第六章 应用层 附上电子版 链接 xff1a https pan baidu com s 1Y XyB3uAitkz0FtW6u1n0g
  • 不能错过的六大在线画图网站

    图表网站列表 xff1a 1 Highcharts2 online visual paradigm3 everviz4 echarts5 AntV6 fooplot 1 Highcharts Highcharts xff1a https w
  • ubuntu software database is broken问题解决

    ubuntu software database is broken 出现如下字样 xff1a ubuntu software database is broken It is impossible to install or remove
  • 批量处理:读取文件夹,将json文件转化为txt文件

    读取文件夹 xff0c 将json文件转化为txt文件 一 样例1 json文件只有一个样本1 json文件内容2 代码转化3 效果图 二 样例2 json文件中有多个样本1 json文件内容2 代码转化3 效果图 三 样例3 json文件
  • Ubuntu18.04对应的ROS安装步骤教程

    Ubuntu18 04对应的ROS安装教程 一 ROS配置1 配置Ubuntu18 04 软件仓库2 开始安装3 测试 二 遇到的问题1 ROS无法下载问题2 sudo rosdep command not found3 rosdep up
  • 最简ubuntu18.04系统分区教程

    最简ubuntu18 04系统分区教程 一 在分区之前先介绍一下ubuntu的文件系统二 分区详情 一 在分区之前先介绍一下ubuntu的文件系统 1 swap xff1a 用作虚拟内存 xff0c 这个要和自己的物理内存一样大 2G 10
  • Ubuntu系统永久设置串口权限

    Ubuntu系统永久设置串口权限 1 查看串口2 查看当前用户名3 设置串口永久权限 1 查看串口 s l dev ttyUSB0 注 所属用户组为 dialout xff0c root用户才具有操作权限 2 查看当前用户名 span cl
  • 【ROS简介】

    ROS简介 1 ROS是什么 xff1f 2 ROS能干什么 xff1f 3 存在的瓶颈 xff1f 4 涉及的技术 xff08 概率机器人技术 xff09 5 内部构造 1 ROS是什么 xff1f ROS的核心是一个分布式 低耦合的通讯
  • 【上传官方服务器评估TrackingNet数据集】

    1 官方链接 数据集评估链接 xff1a https eval ai web challenges challenge page 1805 overview 2 以zip压缩包的形式提交测试结果 3 查看提交结果 4 在排行榜查看排名
  • 【git常用操作】git的分支创建、切换、提交与关联分支操作

    1 下拉项目 下拉代码建议用ssh密钥方式下拉 xff0c 配置好之后后续操作不需要输入密码等权限验证操作 xff0c 很方便 git clone span class token punctuation span 代码链接 span cl
  • 【国际学术会议举办的城市和国家】

    与计算机视觉相关的国际学术会议在不同年份举办的城市和国家列表 xff08 持续更新中 xff09 会议名 城市和国家 IJCAI2019 Macau China IJCAI2021 Montreal Canada CVPR2005 San
  • 【简历下载教程】

    这里有几个不错的简历下载网站 xff1a 1 https jianlixiazai cn 2 http www yyfangchan com 3 https sc chinaz com jianli free html 4 https sc
  • 软件工程—需求分析阶段

    第一步 需求获取 为了保证能全面地获取信息 xff0c 以更好地服务于产品设计和迭代 xff0c 产品经理必须利用内部外部等多种渠道来获取用户需求 并且因渠道差异 xff0c 产品经理所采取的方式与方法也相应会有所差异 xff0c 所以产品
  • c大小为0的数组

    大小为0的数组 Q xff1a 数组大小为0应该怎么理解 xff1f 比如 xff1a struct page page 0 unsigned long private 0 cacheline aligned A xff1a 一个很好的例子
  • 【安装ROS执行rosdep init、rosdep update失败-本地解决方法】

    Ubuntu系统安装ROS时 xff0c 执行rosdep init rosdep update失败 本地解决方法 1 克隆镜像文件2 修改20 default list文件3 修改sources list py文件文件3 1 执行命令3
  • 中兴2016校招软件在线笔试题

    面试经验可以参考我的另一篇文章 xff0c 是7月初参加openday面试的 xff0c 文章链接http blog csdn net dandelion1314 article details 47009585 招聘群里有人发的招聘时间安
  • docker 图形化界面portainer

    portainer 官方地址 https portainer readthedocs io en latest deployment html 网易镜像网站https c 163yun com hub m home 国内拉去镜像 docke
  • ST电机库v5.4.4源代码分析(6): PID以及相关参数

    编者 xff1a 沉尸 5912129 64 qq com 前言 xff1a 本文章探索st电机库自动生成的PID参数的由来 xff0c 采用的控制板为野火407电机板 43 BLDC带Hall的电机 在 Mcboot 函数中初始化变量 P
  • 【Pixhawk】注册一个字符型驱动设备

    最近学习Pixhawk的SPI xff0c 本以为PX4是STM32单片机而已 xff0c 写个SPI驱动应该很简单 但是当我看到mpu9250的那些cpp文件 xff0c 我一下就蒙了 由于PX4用的NUTTX系统 xff0c 类似Lin