本文转自忠达模型公众号(ID:ESKY-DTS-GWY)Betaflight瘦身大招 – 打造专属于自己个人订制的飞控固件版本[color=rgba(0, 0, 0, 0.298)]DTS GT200穿越机 [url=]忠达模型ZONDAHOBBY[/url] [color=rgba(0, 0, 0, 0.298)]2018-12-15
作为一个飞行爱好者,小编一直对飞控和固件很好奇。偶然听攻城狮提到开源官网有介绍,果然看到好东西,于是翻译过来,与众飞友分享。 温馨提醒:本文涉嫌技术讲解,略显枯燥,可先观看视频放松一下.
进入主题 控的计算能力和存储空间都是有限的。开发者需要综合考虑大部分用户的实际情况后,决定哪些功能需要启用,哪些功能可以停用。
例如,官方公开发布给用户的固件版本,一般都包含了支持很多品牌遥控器和接收机的功能。但是对于具体用户,一般会习惯使用一个品牌的遥控器和接收机。官方因为针对大多数人群,所以需要这样做。但这么多品牌的不同协议和处理机制,是需要占用内存空间的,如果屏蔽掉具体某一个人不需要的品牌协议,则省出来的空间,可以用来运行其他功能。
本文简单介绍如何订制自己专属的Betaflight版本,如何对不同功能进行启用或者停用,特别是针对老飞控(内存空间不够的情况)非常有用。
请注意并意识到,自己打造专属版本的固件,需要用到一些第三方软件,并且该操作过程客观存在一些不确定因素,可能会导致bug的产生,而这些bug在官方公开发行的版本中是不存在的。因此,你必须为自己的行为负责。
要求具备的技能:生成自己的固件版本
本文是给有一定编程背景知识和技巧,并且能够独立编译生成固件的朋友看的。关于此项要求的更多信息,请参考Betaflight开发团队的开发者说明。
如果你已经能够成功编译你自己的固件,那么你可以继续按照本文所述,进入下一部分内容的学习和操作。
固件编译完成后,编译结果会显示以下概览性信息: 'text+ data'这两项数值之和,代表编译后固件占用的Flash空间大小是多少。 'data+ bss'这两项数值之和,代表编译后固件使用了多少RAM空间(静态的内存空间) 译注:RAM芯片断电后数据会丢失,Flash芯片断电后数据不会丢失,但是RAM的读取数据速度远远快于Flash芯片。 建议将自定义版本大小控制在小于未修改版本(官方发行版)的大小。
Betaflight开发团队指定激活或不激活飞控的功能的第一个文件是target/ common_fc_pre.h。 译注:在\src\main\target路径下。
根据飞控内存的大小,或者其他限制条件的要求,可以在这个文件中,对指定的功能进行启用或者停用。
我们第一个感兴趣的地方,就是该文件内容中,针对所有飞控都指定激活的功能部分。官方版本摘录举例如下: 上面这些代码,不管是什么版本的飞控,官方版都给启用了。 在打造你个人专属的版本时,可以根据自己使用的接收机制式(协议),关闭其他你不用到的协议。
接下来我们感兴趣的,是根据Flash大小(够不够64M),官方版本决定功能启用与否的部分了,例如下面: 然后如果Flash大于128M,则官方版本会启用以下功能 这个文件中(指《common_fc_pre.h》),另一个有意思,也是我们感兴趣的部分,就是依据飞控的容量,或者说主芯片的功能模块是否具备,来决定禁用或启用的功能了。例如: 如果飞控主芯片不具备FPU(浮点计算单元)功能模块(例如,F1飞控),你最多只能使用接收机的6个辅助通道。 译注:加上两个遥杆的4个通道,总共10通道。也就是说,即使遥控系统有100个通道,也只有10个通道有效。 因此,仔细阅读这个文件,你就可以知道,哪些功能对你有用,哪些没用,这样,你就可以通过启用或者停用,订制出自己专属的版本了。 注意:最好不要直接在源文件中修改。阅读源文件的作用,是让你了解并搞清楚你需要启用哪些功能,需要停用哪些功能。要改的时候,建议对整个项目重新复制一份副本,在副本中进行修改。 不同飞控版本,都有自己的功能定义文件 仔细研究Betaflight的目录结构,会发现,每个飞控都有一个专用的文件来指定该飞控启用或禁用的功能。被停用的功能,可能是因空间限制而被禁用,也可能是因为主芯片的运算能力有限或该功能存在bug而禁用。 所以,启用某项功能的话,使用者需自行承担由此导致的风险。
这个专用文件的路径是:target文件夹/[飞控名文件夹]/target.h 在编译时,编译系统是先加载target/common_fc_pre.h文件,然后再加载这个target文件夹/[飞控名文件夹]/target.h文件。因此,对此文件(《target.h》)的任何修改,都会覆盖掉默认设置。秘密就在这里,订制个人专属的版本,就是要修改这个文件。 修改的第一步,就是要在《common_fc_pre.h》文件中,对准备停用的功能,利用#undef取消已经定义的宏(即取消宏定义)。 例如,对于NAZE32飞控,如果我们使用的是串行接口的接收机,比如小编现在使用的接收机是GWY家的SBUS制式接收机,同时小编的飞机上没有用到LED灯,那么我可以在《common_fc_pre.h》中,利用“#undef”对其他用不到的功能进行取消宏定义,如下操作:
#undef USE_PPM
#undef USE_PWM #undef USE_SERIALRX_CRSF #undef USE_SERIALRX_IBUS #define USE_SERIALRX_SBUS #undef USE_SERIALRX_SPEKTRUM #undef USE_SERIALRX_SUMD #undef USE_SERIALRX_SUMH #undef USE_SERIALRX_XBUS #undef LED_STRIP
#undef TELEMETRY_FRSKY #undef TELEMETRY_HOTT #undef TELEMETRY_LTM #undef TELEMETRY_SMARTPORT #undef USE_SERVOS
这样修改后,我们通过取消部分功能,节省出了一些内存空间。节省下来的空间,就可以用来启用其他功能,例如GPS等。比如我手头的旧款飞控,主芯片只有64M内存空间,原来按照官方版本,是无法启用128M空间所拥有的功能的,但现在,节省出来的空间,让我可以通过增加宏定义#define来添加新功能。比如我把原来128M下功能的GPS,移植到64M功能下,就是在64M代码下增加行如下:
#define GPS
需要特别小心的是,有些功能是相互依存的,如果不小心,就可能弄出bug来。比如,#defineUSE_TELEMETRY_MAVLINK功能,是需要先启用TELEMETRY才能实现,是基于TELEMETRY功能基础上的功能。 以上是对一些针对所有版本飞控的通用功能进行停用,只需修改common_fc_pre.h头文件。 修改的第二步,更深入的订制方法。需要找到目标飞控所对应的target.h头文件(位置在target文件夹/[飞控名文件夹]/target.h)。 下面以NAZE文件的头文件为例: 打开NAZE文件以后,找到target.h头文件 打开此头文件,找到如下图代码段 在这,可以看到已经宏定义了不同种类的陀螺仪芯片,加速度计芯片,气压计芯片。几乎把市面上,这个行业中出现的芯片都定义齐全了,目的是为了适应不同版本的飞控。此时,小编可以根据自己手里的飞控采用的陀螺仪芯片,加速度计芯片,气压计芯片,去除掉其他没用到的芯片定义。从而又可以节省出一部分空间出来。 去除的方法就是直接注释掉。 同样,在这个文件中,仔细观察,会发现有些功能被停用掉,比如: 上面截图中,磁力计被注释掉,表示磁力计功能没有启用。如果小编取消注释,就可以激活磁力计功能,此时NAZE飞控就有磁力计功能了。
对此文件进行修改以后,重新编译生成固件,就可以得到你自己订制的专属飞控版本了。为飞控瘦身,删掉不必要的功能。只留用需要的功能。
后语 正如本文中再三强调,如果你把开发团队在官方发行版本中停用的某些功能激活了,那有可能导致主芯片运算能力不够,或者产生某些bug。因此,需要小心操作,并且你必须对自己的行为负责。 小编用的穿越机是DTS家的GT200穿越机,遥控系统是GWY的AH6T搭配GWY SBUS接收机,视频眼镜是GWYCobra V眼镜。 来一段视频缓解一下眼睛疲劳吧~
最后,在线订制和编译链接如下:
https://bf.fpv.wiki/
1. 先在Version右侧选择想要订制的版本号,
2. 然后在Target右侧选择板子类型
3. 再然后在Select features for the build:列表选择所要的功能(其实就是启用或停用各个功能模块的总开关(宏定义))
4. 最后在下面输入你的邮箱地址,并点击BUILD,就开始编译。
5. 编译完以后,会发送邮件到你邮箱,从邮箱提供的链接下载烧码档,邮件会记录启用了那些功能,方便自己比较。
|