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

相关文章

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta