- 博客(139)
- 收藏
- 关注
原创 无人机组装和选材
相同的电机,不同的KV值,用的螺旋桨也不一样,每个电机都会有一个推荐的螺旋桨。因为电机的电流是很大的,通常每个电机正常工作时,平均有3A左右的电流,如果没有电调的存在,飞控板根本无法承受这样大的电流(另外也没驱动无刷电机的功能)。综上所述,大螺旋桨就需要用低kv电机,小螺旋桨就需要高kv电机(因为需要用转速来弥补升力不足)如果高kv带大桨,力量不够,那么就很困难,实际还是低俗运转,电机和电调很容易烧掉。具体效率要看电机的效率表。电机内阻小,电流大,转速快,相同电压下爆发出来的功率高,拥有很好的极限转速。
2025-12-23 13:27:46
859
原创 飞控-遥控器PPM协议 解析
参数典型值说明单个脉冲范围表示一个通道的具体数值脉冲中性点1500μs摇杆回中的位置脉冲间间隔分隔同一个帧内的各个通道脉冲帧同步间隔>2000μs (通常≥2500μs)分隔不同的数据帧,是识别的关键通道数量通常最多8个常见的是4, 6, 8通道总帧长度决定了PPM信号的刷新率(约40-60Hz)电压电平3.3V 或 5V取决于接收机和飞控的硬件水平。
2025-09-12 10:25:53
1260
原创 在RTOS中,任务调度的原理以及场景
实时操作系统(RTOS)的任务调度是其核心功能,负责在多个就绪任务之间高效、确定地分配CPU时间,以满足实时性要求。RTOS的任务调度是一个复杂但高度优化的过程,核心在于、以及。是实时性的基石,辅以保证公平性。理解各种调度场景(抢占、阻塞/解除阻塞、ISR退出、时间片到期等)和解决问题,对于设计和调试可靠的实时系统至关重要。
2025-08-19 13:27:13
1221
原创 在rtthread中, 互斥锁(mutex)和信号量 在中断ISR中使用的区别
此外,互斥锁的释放操作可能涉及优先级继承的解除,这需要修改持有锁的线程的优先级,而中断上下文无法安全地执行这些操作(因为可能涉及调度,而中断中不能调度)。如果同一个线程多次获取同一个信号量(而没有中间释放),那么第一次获取成功,第二次获取时如果信号量计数已经为0,则该线程会阻塞等待自己释放信号量,从而造成死锁。如果信号量不可用(计数为0),那么获取操作会使当前执行上下文等待,而中断不是线程,中断中没有线程控制块TCB可以挂起,所以不允许。,不支持递归,可以在中断中释放(但不可获取),因为释放操作不会阻塞。
2025-08-18 15:49:26
1137
原创 在rtthread中,互斥量不能在中断服务例程中使用?以及线程多次持有互斥量的情况怎么理解?
即:坚决不能在中断服务ISR中,调用 take mutex 或者 take sem。因为当其他线程中一旦已经获取 mutex 或 sem 时,当中断 INT 打断线程,进行中断上下文切换时,在中断服务ISR中,执行take mutex 或者 take sem操作,将使的整个中断进入阻塞状态。首先必须明确一点,无论是在裸机还是RTOS实时操作系统,在中断服务ISR中,都要求中断处理快速执行,绝对不允许中断出现任何阻塞的操作,否则会影响确保其他任务的实时运行,破坏系统的稳定性。
2025-08-18 11:17:24
266
原创 rtthread - FMT 飞控 各个 uart 串口的绑定和初始化流程
设备初始化 init 操作而是通过调用rt_device_open()接口会自动检测设备的初始化,如果 open 打开设备之前 没有执行初始化则默认会调用设备初始化接口按驱动默认配置进行初始化设备。接口注册到IO设备管理器总线时,并不执行初始化操作。在rtthread中,设备驱动通过。
2025-08-15 10:59:18
301
原创 rtthread - ROMFS 的使用方式
RT-Thread中ROMFS的实现提供两种存储方式:一是将ROMFS镜像烧录到Flash独立分区,通过绝对地址直接访问;二是将文件内容编译为C数组嵌入固件,链接到.rodata段。ROMFS不依赖块设备驱动,采用直接内存映射方式访问静态资源,其核心结构体romfs_root指向存储在Flash中的二进制数据。与传统FATFS不同,ROMFS是零开销的只读文件系统,适合存储嵌入式系统的静态资源,通过romfs_root->data直接访问文件内容,无需动态挂载。这种设计使其在资源受限的嵌入式环境中具有
2025-08-14 14:01:23
454
原创 rtthread - DFS文件系统
POSIX 表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写 POSIX)POSIX 标准:定义了操作系统应该为应用程序App层提供统一的接口标准,目的是为要在各种 UNIX 操作系统上运行的软件而定义的一系列统一的 API 标准。POSIX 标准 意在 期望获得 源代码级别的软件可移植性。换句话说,为一个 POSIX 兼容的操作系统编写的程序,应该可以在任何其它 POSIX 操作系统(即使是来自另一个厂商)上编译执行。
2025-08-12 13:43:47
359
原创 Function[_rt_mutex_take]: scheduler is not available(0) assertion failed at function:_rt_mutex_take
因为在 RT-Thread 5.1.0 的钩子函数中不恰当地访问内核对象导致的。当主线程退出时,在对象分离钩子()中尝试释放资源,而此时调度器已不可用,触发了断言失败。因为我写了回调钩子函数,经过分析。分析原因,在线程删除后,报错;
2025-07-18 10:18:19
292
原创 rtthread - V5.1.0版本 HOOK 钩子函数总结
rtthread - V5.1.0版本 钩子函数 相对于V4.0.3版本做了很大的修改和优化:旧版本 V4.0.3:新版本 V5.1.0:在RT-Thread V5.1.0版本中,删除线程的回调钩子函数(hook)机制主要围绕宏定义配置:函数实现:宏定义配置:若选择软件栈溢出检查,确保 函数逻辑与栈生长方向一致:RT-Thread V5.1.0支持两种钩子注册方式,编译时插入代码块 优先级高于 函数指针方式:机制: 通过全局函数指针注册钩子,例如线程删除时触发:
2025-07-16 14:44:35
1062
原创 rtthread - 4.0.3版本升级到V5.1.0,发现shell msh命令行,一输入回车换行等任意字符就卡住问题
经过大量时间的排查错误,负责RTOS平台适配移植的同事发现,在Start.S启动文件中发现,他在移植适配中断向量表时,默认给的 lina_isr(),注册的是scic_rx_isr(),会导致使用SCIC串口时,如果执行Rx中断接收数据,本应该跳转到scic_rx_isr,会找不到函数入口去执行。串口scic使用Rx接收使用中断,Tx发送使用polling轮询方式,下图框红为SCIC Rx注册的中断ISR服务函数,但是当接收数据时,在线调试,总是进入异常中断中,直接被while(1)锁住。
2025-07-15 13:50:34
601
原创 scons构建 - SConstruct执行脚本时,为什么会先于构建前执行?AddPostAction用法
scons --verbose: 显示详细编译选项和依赖关系(调试用)scons -c:清除编译生成的目标.o文件。scons -jN:N条线程编译。
2025-07-03 13:31:13
159
原创 FMT 开源飞控 - 移植注意事项
这很可能是指多旋翼飞行器(MAV,Multi-rotor Aerial Vehicle)的板载计算机(OBC,On-Board Computer)的初始化。:这可能是指多旋翼飞行器的地面控制站(GCS,Ground Control Station)的初始化。这个组件负责记录飞行过程中的各种数据,如位置、速度、传感器读数等,以便于后续的数据分析和飞行性能评估。并把RTT的IO设备管理器总线驱动组件的include/目录下的头文件分开到各个子目录下面。配置遥控的协议,通道数,采样时间,通道数值范围等。
2025-07-01 16:07:38
1155
原创 TI dsp Timer 定时器
TDDRH:TDDR是分频器 和 PRDH:PRD是计数器的周期,相当于是影子寄存器功能,会分别加载到 PSCH:PSC是分频器的执行寄存器 和 TIMH:TIM是PRDH:PRD的执行寄存器 中。
2025-06-11 14:27:53
312
原创 TI dsp - INT 中断
中断是通过一系列 flag 和 enable 寄存器传播到 CPU。Flag 标志寄存器存储中断,直到它被处理。enable 寄存器阻止中断的传播。当中断信号到达 CPU 时,CPU 会从称为向量表的列表中提取适当的 ISR 地址。
2025-06-09 15:59:51
280
原创 TI dsp FSI (快速串行接口)
快速串行接口(FSI)模块是一种串行通信外设,能够在之间实现可靠的高速通信。在两个必须交换信息的情况下,电气隔离设备被使用。虽然隔离设备促进了信号通信,但它们也会在信号线上引入较大的延迟,并增加信号之间的时序差异。FSI 专门设计用于确保系统在涉及隔离障碍的通信场景中进行可靠的高速通信,同时不添加额外的组件。FSI 包括独立的发送器(FSITX)和接收器(FSIRX)核心。FSITX 和 FSIRX 核心可以独立配置和操作。
2025-05-29 09:37:54
1285
原创 sd - 批量修改文本文件的命令和软件工具
sd - 现代化替代原始的sed命令的工具,支持正则表达式和多行匹配,可以实现对所有文件批量正则添加 替换 删除操作。(1)将sd.exe工具包,放到git安装目录的bin/目录下面,就可以在git-bash里直接用。
2025-04-27 16:48:56
359
原创 EPWM - 死区DB
这里的极性翻转一般是相对于EPWM_B通道来讲的,EPWM_A一般继续保持输入进来的波形,不做翻转。同一EPWM外设中的A和B两个通道,互补PWM信号极性反转。在死区时间内,A和B都输出低电平。
2025-03-07 10:00:51
331
原创 飞控 - 传感器校准
飞控刚开机启动时,会使用未经校准的imu、磁力计等传感器,来计算飞控的初始姿态会导致比较大的偏差。飞控需要一定的时间来动态估计姿态的误差,经过一段时间后姿态才慢慢收敛趋于稳定。因此为了避免飞控刚开机启动时姿态的不稳定,需要传感器的校准。
2025-02-27 11:12:24
844
原创 飞控 - pixhawk、PX4、APM、ArduPilot 、io协处理器 之间的区别和关系?
首先,从硬件和软件区分:飞控硬件平台(飞控硬件板子):pixhawk、APM飞控软件平台(飞控软件固件):PX4、ArduPilot是指用于扩展飞控输入输出(IO)功能的专用芯片,通常集成在飞控硬件中(如V5+或Pixhawk)。它的主要作用是管理和扩展飞控的通信接口,支持与外部设备(如传感器、执行器、GPS等)的高效通信。一般使用低性能的外设比较多的处理器(mcu,eg:stm32F103xx).
2025-02-26 09:38:58
2752
原创 FMT源码 - module
Param 参数模块提供了定义、读取、写入和存储参数的功能。这些参数可以存储在各种存储设备上,例如SD卡或闪存。如果没有参数文件存在,则将使用默认的参数值。uMCN 是 类似于 PX4里面的。在系统启动阶段,参数从。
2025-02-25 17:05:52
404
原创 rtconfig.cpython-313.pyc 在 .gitignore文件中写入 *.pyc 文件仍然没有被忽略?
在.gitignore文件中添加*.pyc和*.*.pyc规则时,如果.pyc。
2025-02-20 16:30:03
523
原创 rtthread - OOP面向对象object的思想,基于结构体操作完成派生、继承
在 C++ 中,“派生”(Derivation)是面向对象编程(OOP)中的一个重要概念,指的是通过继承(Inheritance)从一个已有的类(基类或父类)创建一个新的类(派生类或子类)。派生类 会继承基类的成员(属性和方法),并且可以在派生类中添加新的成员或修改继承的成员行为。
2025-02-12 15:04:06
278
原创 在 rtthread中,rt_list_entry (rt_container_of) 已知结构体成员的地址,反推出结构体的首地址
rt_list_entry (rt_container_of)宏定义:将 rt_container_of: ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))分为2个部分:(1)(type *)((char *)(ptr)(2)&((type *)0)->member-------------------------------------------------------------------------------
2025-02-12 14:23:10
605
原创 芯片中,ping pang mode(乒乓模式)、one shot mode、影子寄存器等介绍
通常在数据交换或处理过程中,系统会同时有两个缓冲区,一个用于当前的数据处理,另一个用于下一个数据的存储。这样,当一个缓冲区的数据正在被处理时,另一个缓冲区可以继续接收或存储新的数据,避免了等待的过程。通过交替切换两个缓冲区,系统可以在显示的同时,继续处理下一帧数据,确保画面的平滑流畅。: 对于音频和视频流的处理来说,乒乓模式允许一个缓冲区接收音频数据(例如,录音或播放音频),而另一个缓冲区则用于处理或输出数据。这样,系统可以在输出一个缓冲区的内容时,继续接收和处理另一个缓冲区的数据。
2025-02-12 13:29:17
1008
原创 在rtthread中,scons构建时,它是怎么知道是从rtconfig.h找宏定义,而不是从其他头文件找?
在rtthread源码中,每一个bsp芯片板级目录下都有一个 SConstruct scons构建脚本的入口,fmtconfig.h也必须和rtconfig.h在同一级目录下,或者包含fmtconfig头文件前面加上绝对路径。在tools下所有模块中,最重要的是building.py模块,在此脚本里面调用了函数。
2025-02-07 13:43:10
553
原创 【vscode】vscode git 源代码管理器,出现由于找不到该文件,因此无法打开编辑器的问题,解决!
造成原因是当前git管理的工程中,有submodule子模块添加进来导致的,需要把 .gitmodules文件里面的链接子模块submodule注掉,即可解决问题。
2025-01-22 13:27:50
991
1
原创 rtthread使用scons构建时,import 导入rtconfig.py文件,遇到执行scons命令时,为什么会执行了rtconfig.py脚本,对此做分析?
SConstruct 脚本开始执行时,在import导入rtconfig模块时,根据import导入原理,在模块导入import rtconfig时,会执行__name__之前的所有内容。
2025-01-17 14:01:44
275
原创 VMware ubuntu虚拟机网络配置
2、无论是笔记本还是台式机,当接插网线上网时,使用的是。1、在使用笔记本时,WiFi联网使用时,使用的是。
2024-12-19 15:30:56
1132
原创 rtthread - 构造线程 和 调度策略 的核心
出栈:通过sp寄存器指向的位置,重写到CPU的R0~R15寄存器中,写入PC程序寄存器时,会自动取指令继续运行程序(任务)。此时需要调用 rt_thread_startup(current_thread)才能将当前线程放入按优先级排列的各个链表中,注意:真正启动调度线程不是rt_thread_startup,而是rt_system_scheduler_start。(本质:将线程栈中保存的reg:R0~R15恢复到CPU寄存器中,即执行当前的线程)高优先级线程(任务)抢占低优先级线程(任务);
2024-12-19 15:09:23
433
原创 在rtthread中创建2个线程,出现线程切换有问题,同时每个线程的定时器也变得不准了,最终发现原因RTthread-FinSH线程优先级调太低导致其他线程运行异常
追踪到最后发现如果 FinSH线程的优先级 - FINSH_THREAD_PRIORITY 设置低于大部分app线程的优先级,会造成msh因为频繁的被其他线程上下文抢占和恢复,造成栈异常,同时偶发会影响到其他线程的运行。FinSH线程的优先级 - 提高设置FINSH_THREAD_PRIORITY = 1优先级调高,需要满足大于大部分app线程的优先级。通过RTthread msh命令行输入ps,来进行FinSH线程和其他线程的切换。
2024-12-17 11:19:21
290
原创 在RTOS的线程任务函数中,while(1)前的局部变量具有和当前线程一样的生命周期
在当前线程未被系统释放delete前,此局部变量无论是在当前任务被抢占切换出去还是被中断操作打断,此局部变量的值都会在内存中被长久保存,直到其所处的线程被系统释放delete,此局部变量也会被同时释放。无论是FreeRTOS还是RT-thread等RTOS中,在其线程/任务的入口函数中,在while(1)前定义的局部变量会伴随整个入口函数的生命周期而同时存在,这是局部变量的固有属性。
2024-12-16 10:55:35
352
原创 在rtthread中,在低优先级任务运行时,高优先级任务来了,是不是也得等低优先级运行完当前的那个时间片Tick后,高优先级任务才能去抢占?
rt-thread中,在低优先级任务运行时,高优先级任务来了,不管低优先级任务时间片有没有运行完,高优先级任务都得立即去抢占。systick处理函数里面有一接口是rt_timer_check里面会对每个挂起的线程进行超时遍历,挂起的线程超时会恢复到ready链表中,后面会接着回调超时处理函数,在里面调用rt_scheduler完成新的一轮调度策略,这是在v3.1.0lts版本的rtt源码。可以确定的是调度器是支持任务按优先级抢占策略的,那么高优先级任务是在哪里完成抢占的低优先级任务的操作的呢?
2024-12-15 14:54:09
459
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅