APM固件太大放不下,咋办?

 最近在定制一款基于STM32H743的飞控,一般在PCB布局前我都会根据原理图先移植一下APM固件,等到编译没有问题之后再布局布线,以防原理图有问题导致前功尽弃。昨晚花了半个小时完成了硬件定义文件的编写,直接用目前最新的Copter-4.3.1版本源代码进行编译,由于APM固件的移植已经比较熟练了,因此直接就编译通过了,不过最新版本固件的大小着实让我意外(如下图所示),2M的Flash竟然都快占满了。同时我也庆幸,土豪级的配置就是省心,这种情况要是Flash小一点的单片机就放不下了。

 谁知道,今天下午在“怒飞垂云无人机交流群”里就有朋友在问一个固件编译报错的问题,经过讨论发现是由于Copter-4.3.1版本固件在默认配置情况下对于以STM32F405为主控的飞控来讲太大了,放不下,从而编译报错。解决方法也很简单:

关闭用不到的功能,不将其编译到固件中。

 APM的多旋翼固件在这方便做的不错,只需要在“ArduCopter/APM_config.h”中将“xxx_ENABLED”宏定义改为“DISABLED”即可。如下图所示,我们关闭了“降落伞”控制功能:

 重新编译后的输出如下:

 对比本文的第一张图片可以发现,节省出来了248436 – 247132 = 1304字节的空间。节省出来的空间不大,可见“降落伞控制”功能的复杂度不高。

 根据群里朋友的描述,他最终将“自动调参”功能禁用掉后成功将APM固件塞入了 “STM32F405”中,那么我们看看在我们的飞控中单独禁用“自动调参”功能可以节省出多少空间:

 从上图可知,最终节省空间为:261996 – 247132 = 14864字节,远大于通过禁用“降落伞控制”功能带来的收益,这也从侧面说明“自动调参”功能的复杂度不低。同时我们也发现,裁剪完后固件还是大于1M字节,按理说STM32F405也应该依然放不下啊,其实这是由于APM源代码中已经有不少根据单片机容量自动裁剪功能的宏定义,如下图所示,如果Flash小于1M,则ADSB功能将自动地不会编译到固件中。

 综上所述,得益于不断优化的代码结构,通过对APM固件功能的裁剪来适配小容量飞控的方法是可行的。固件太大放不下,就裁剪它的功能!

《无人机飞控固件开发教程》系列视频的辅助资料,已在“网易云课堂”上线 , 链接:https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983

无人机调试,飞控硬件定制、固件修改,日志分析,请QQ联系:3500985284

京ICP备19049723号   |   京公网安备 11010502039327号