PX4中ESC的驱动框架

2024-08-31 00:08
文章标签 驱动 框架 px4 esc

本文主要是介绍PX4中ESC的驱动框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Cdev继承的是Device,然后I2C又是继承的CDev,然后ESC又是继承的I2C,Device---->cdev---->I2C---->ESC。

ESCinit函数里面:首先会调用I2C的init函数。然后配置RST管脚,然后配置电调的I2C地址,包括两个方面,一个是设置飞控程序里面的总线地址,另一个是motor端的I2C地址。

I2Cinit函数里面:_dev----px4_i2c_dev_t----i2c_dev_s----i2c_ops_s,在I2C的init函数里面,首先是一个up_i2cinitialize函数,还要调用I2C_SETFREQUENCY函数设置频率,然后就是调用cdev的init函数。

cdevinit函数里面:首先调用device的init函数,然后主要就是一个register_driver函数,这个register_driver函数把/dev/esc传进去,还有fops结构体,还有this指针,这里的this应该是g_esc,也就是esc对象的首地址。

 

Qesc.cpp624行里面的Open函数是怎样一级一级的到达底层的?

A:这个open是在fs_open.c里面的88行的open,open的时候要把路径path传进去,在open里面inode = inode_find(path, &relpath);根据路径返回一个设备节点,再往下,open里面还有fd = files_allocate(inode, oflags, 0, 0);根据设备节点再返回一个文件数组的下标,这个下标就是相当于文件描述符。

然后在fs_open.c里面的187行还有一个inode->u.i_ops->open函数,这个open函数就是inode的fops结构体里面的open函数,然后在cdev.cpp里面80行可以看到,fops结构体里面的open函数实际上就是cdev_open,在cdev.cpp的410行有cdev_open,在cdev_open 里面又指向了另一个open,你用sourceinsight查找的时候它指向了cdev.cpp的180行,实际上是不对的,在cdev.cpp里面进行了一个强制类型转换,然后sourceinsight没有那么智能,这里的open函数实际上是filp->f_inode->i_private里面的open函数,这里的i_private就是this,具体实现就是在cdev的init函数里面有一个register_driver函数,在这个register函数里面把this赋值给了i_provate,这里的this就是ESC,所以最后调用的是esc里面的open函数,只不过esc里面用不到自己的open函数了,所以esc里面就没有弄自己的open函数,只需要调用一个顶层的open函数返回一个文件数组的下标就可以了。

fs_files.c的323行就是找空下标的,那个for循环就是去找一个空的下标,然后把它放在里面。

Nuttx实际上用了一个伪文件系统,用的是全局的文件数组,然后每个文件

里面包含有f_inode。

然后在inode里面又包括u和i_private,

然后在u里面又包含file_operation结构体。

 

Q:在i2c_nuttx.cpp的146行有一个I2C_SETFREQUENCY函数,这个就是在i2c.h里面的108行,最后就是在i2c.h的250行的ops结构体里面的setfrequency函数指针,最后就是stm32_i2c.c里面的1566行的stm32_i2c_setfrequency函数,那么这个ops里面的setfrequency是怎么和stm32_i2c_setfrequency联系到一起的呢?

Q:比如说这个esc.cpp这个程序是怎么跑起来的,真正下载到飞机里面之后不应该是在命令行里面输入esc_start命令让他

里面有一个rcS的脚本,这个应该就是启动脚本,网上可以搜到,

几个名词  Q:esc.cpp的86,SCHEDULE_INTERVAL是什么意思,

这个是发送速度信号的时间间隔

Q:esc.cpp的113,IOX_MODE

这个模式没有用到,

Q:esc.cpp的120,actuator_armed_s,

遥控器有一个动作之后,飞机解锁,结构体里面的armed=1,就表示解锁了,然后电机就可以转动。

Q:在I2C_nuttx.h的47行,__EXPROT右键ctrl之后是哪个,然后是什么意思。

让别的文件可以使用。

 

 

复习完之后的总结:实际上在PX4里面是有一个全局的文件数组,当你用open去打开一个设备的时候,它实际上会去找一个空的数组元素,然后把相关的信息保存在这个数组元素中,然后返回的是这个数组的下标,这个数组元素的下标就相当于文件描述符,

那么问题来了,在这个数组元素中保存的是什么东西呢,

数组元素中保存的是一个file,一个file就是一个结构体,结构的元素在上面的图片中有介绍。

 

这篇关于PX4中ESC的驱动框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122326

相关文章

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2