查看: 1136|回复: 0

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

[复制链接]

33

主题

861

帖子

1704

积分

金牌飞友

Rank: 6Rank: 6

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

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

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

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

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

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

    重新编译后的输出如下:

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

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

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

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

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

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

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

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

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

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

您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表