飞控中的事件驱动编程从一次炸机说起去年夏天,我在调试一架四轴无人机时遇到了一个诡异的故障。飞机悬停时偶尔会突然抽搐一下,像是被什么东西吓到了。用数传看日志,发现电机输出在某个时刻出现了微秒级的跳变。查了三天,最后定位到问题:一个传感器中断服务函数里,我直接调用了姿态解算和电机控制函数。中断嵌套导致优先级反转,高优先级任务被低优先级中断阻塞,电机控制指令被延迟了整整2毫秒。2毫秒在飞控里是什么概念?足够让飞机偏转3度,然后PID拼命修正,再修正过头,最终表现为肉眼可见的抖动。那次之后,我彻底重构了飞控的软件架构,全面转向事件驱动。今天聊聊这个在嵌入式飞控里被严重低估的编程范式。轮询的陷阱很多刚入门的同学写飞控,习惯在主循环里这样写:while(1){read_sensors()
117、飞控中的事件驱动编程
飞控中的事件驱动编程从一次炸机说起去年夏天,我在调试一架四轴无人机时遇到了一个诡异的故障。飞机悬停时偶尔会突然抽搐一下,像是被什么东西吓到了。用数传看日志,发现电机输出在某个时刻出现了微秒级的跳变。查了三天,最后定位到问题:一个传感器中断服务函数里,我直接调用了姿态解算和电机控制函数。中断嵌套导致优先级反转,高优先级任务被低优先级中断阻塞,电机控制指令被延迟了整整2毫秒。2毫秒在飞控里是什么概念?足够让飞机偏转3度,然后PID拼命修正,再修正过头,最终表现为肉眼可见的抖动。那次之后,我彻底重构了飞控的软件架构,全面转向事件驱动。今天聊聊这个在嵌入式飞控里被严重低估的编程范式。轮询的陷阱很多刚入门的同学写飞控,习惯在主循环里这样写:while(1){read_sensors()
相关文章
C++虚表
多态的基本概念 1.多态是指允许一个接口被多种类型的对象使用,通常通过继承和重写实现 2.在C中,多态的实现依赖于虚函数 多态的实现 1.父类提供数据成员和成员函数,子类继承并重写父类的函数 2.函数参数为父类指针,可以传递父类对…
svn换行符不统一导致一堆无效commit问题及解决思路
svn换行符不统一导致一堆无效commit 问题记录及解决背景:用git管理源码,svn管理编译后的文件,git提交正常,但svn提交一致提示换行符的问题,导致commit时一堆没改动,但因为换行符为CRLF与服务器文件的LF不一…
鸿蒙极简天气App实战:ArkTS三大装饰器入门
摘要本文基于HarmonyOS ArkTS(ArkUI声明式开发范式)从零搭建极简天气预报应用,全程使用Entry、Component自定义组件、State响应式状态管理三大核心装饰器,实现城市名称展示、实时温度渲染、随机切换天气功能。适合大一鸿蒙入门开发…
跨网文件安全交换系统推荐:兼顾安全效率合规企业数字化必备
在网络隔离日益严格的当下,企业内外网、研发网与办公网、涉密网与互联网之间的文件交换需求持续增长,跨网文件交换既要安全又要高效,市面上方案五花八门,到底怎么选?跨网文件安全交换系统推荐成为众多企业选型的关键课…
福州门窗预算怎么控制先看需求组合
我最近帮朋友盯福州装修,真的碰到这种事儿:福州装修市场里,门窗费用常被业主看成一笔糊涂账。同样户型做门窗,有人花五千,有人花两万,最后效果和性能却未必差出四倍。其实问题根本不在选多贵的产品…
TinyVue Tree树形控件完全指南
TinyVue Tree 树形控件完全指南:层级数据展示的瑞士军刀 本文基于 OpenTiny TinyVue 官方 API 与示例整理,组件包:opentiny/vue 如果你做过后台管理系统,一定见过这种场景:左侧一棵目录树,右侧一堆表格&…
MiMo邀请码:V5ABSC
我在用 MiMo 开放平台体验 小米顶尖模型 MiMo V2.5等 ,通过我的邀请码注册为新用户,即得 10 API 体验金。邀请码:V5ABSC。注册:https://platform.xiaomimimo.com?refV5ABSC(注册后点控制台左下方入口填入,…
开机弹找不到指定的模块怎么办?先修DLL运行库再按路径清启动项
开机就弹"找不到指定的模块",多半是某个启动项、计划任务、服务或系统组件还在调用一个早已被删掉的 DLL 或 EXE。处理思路是两步走:先把 DLL 和注册表残留补齐修好,再顺着路径判断哪条入口需要手动清掉。 弹出这个提示࿰…
Flutter---GlobalKey
基本概念:GlobalKey 是 Flutter 中一个特殊的标识符,它可以全局唯一地标识一个 Widget,并允许你在应用的任何地方访问这个 Widget 的状态、位置和大小。类似于GPS。主要的属性和方法GlobalKey _key GlobalKey();// currentContext - 获取该 …
NomNom存档编辑器架构解析:跨平台游戏数据管理技术实现深度剖析
NomNom存档编辑器架构解析:跨平台游戏数据管理技术实现深度剖析 【免费下载链接】NomNom NomNom is the most complete savegame editor for NMS but also shows additional information around the data youre about to change. You can also easily look up each …
从导航软件到游戏寻路:用C++手把手实现Dijkstra最短路径算法(附完整代码)
从导航软件到游戏寻路:用C手把手实现Dijkstra最短路径算法每次打开手机地图导航,或是操控游戏角色穿越复杂地形时,背后都藏着一个数学魔法——最短路径算法。Dijkstra算法作为图论中的经典解决方案,从1956年诞生至今,已…
告别B站收藏夹吃灰:用BiliTools让每一秒学习都物超所值
告别B站收藏夹吃灰:用BiliTools让每一秒学习都物超所值 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …
LED驱动技术全解析:从核心架构到实战选型与避坑指南
1. 从一颗灯珠到千亿市场:LED驱动的技术演进与商业逻辑十几年前,当我第一次从料盘上拿起一颗0603封装的白色LED时,它微弱的光晕和高达几块钱的单颗成本,让我很难想象今天它几乎照亮了我们生活的每一个角落。从手机屏幕的一抹背光&…
索引堆及其优化
索引堆及其优化 引言 索引堆是一种数据结构,广泛应用于计算机科学和软件工程领域。它主要用于解决优先队列问题,如最小堆和最大堆。本文将详细介绍索引堆的概念、实现方法以及优化策略。 索引堆的定义 索引堆是一种基于堆数据结构的索引机制。它通过维护一个堆来存储数据…
从零到日增237精准粉丝,我靠CSDN这张AI卡片爆了!手把手复刻全流程,含配置避坑清单
更多请点击: https://intelliparadigm.com 第一章:CSDN AI 数字营销的官方引流卡片是什么功能? CSDN AI 数字营销平台推出的「官方引流卡片」,是一种面向技术创作者的轻量级、可嵌入式内容分发组件,专为提升博文、教程…
Zotero Duplicates Merger:5步彻底清理文献库重复条目
Zotero Duplicates Merger:5步彻底清理文献库重复条目 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 还在为文献库中堆积如山的重…
利用随机有限集理论对蜂群的ILQR和MPC控制研究附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…
为什么你的Gemini邮件CTE低于行业均值2.8倍?:从Prompt架构到发送时序的深度归因
更多请点击: https://intelliparadigm.com 第一章:为什么你的Gemini邮件CTE低于行业均值2.8倍?:从Prompt架构到发送时序的深度归因 Gemini邮件的客户转化效率(CTE)显著偏低,根本原因常被误判为…