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

相关文章

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

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

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

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