APM编译记录-基于OMNIBUSF4-V3飞控板
APM编译记录
初次使用APM,根据博客文章以及结合官方教程摸索,发现和PX4还是有挺大差别的,目前系统已经换到chibios了,不是原来的nuttx。
感谢梦萦蓝天的教程
先给出参考的链接: 参考博主的帖子
APM官网教程
本记录是基于Ubuntu环境已经搭好并且编译环境也已搭建完成。
Bootloader问题
编译好apm的bootloader之后使用openocd连接jlink下载进飞控,然后使用 reset 复位之后 发现再也连接不上飞控了。
连接信息没有出现error 字眼,但在最后两行出现:
in procedure 'init'
in procedure 'ocd_bouncer'
经过各种验证,是由于apm的omnibusf4目标基于omnibusf4pro目标的,而这个目标的hwdef_bl.dat里面没有配置 SWD导致 烧录后直接禁用掉了SWD功能,经过拉高boot0再上电然后可以连接上了,但没从根本上解决。
解决办法:在ardupilot/libraies/AP_HAL_ChibiOS/hwdef/omnibusf4pro目录下的hwdef_bl.dat文件最后面 加上下面两行
# debug
PA13 JTMS-SWDIO SWD
PA14 JTCK-SWCLK SWD
重新编译BootLoader然后烧录,问题解决。
固件编译
编译正常使用一切正常,但想在VS Code里面debug 编译目标需要加–debug指令,编译出来的固件flash 超出了大约14K,解决办法是在ardupilot/build/omnibusf4下面的ldscript.ld文件修改固件最大容量
把
MEMORY
{
flash : org = 0x08010000, len = 960K
ram0 : org = 0x20000000, len = 131072
}
INCLUDE common.ld
修改为:
MEMORY
{
flash : org = 0x08010000, len = 980K
ram0 : org = 0x20000000, len = 131072
}
INCLUDE common.ld
固件容量从960K变为980K,重新编译没有问题,进行debug发现会死在加载不到1024K地址的错误提示信息,没办法,只能删减功能。APM利用宏定义的方式选择开启或关闭一些功能,并不像PX4那样利用cmake的路径包含方式。
修改的文件在ardupilot/ArduCopter目录下的APM_Config.h
原本它是注释掉了所有,我把一些给打开表明禁用掉这些功能。
#define LOGGING_ENABLED DISABLED
#define MOUNT DISABLED
#define AUTOTUNE_ENABLED DISABLED
#define CAMERA DISABLED
#define OPTFLOW DISABLED
#define FRSKY_TELEM_ENABLED DISABLED
#define ADSB_ENABLED DISABLED
#define SPRAYER_ENABLED DISABLED
重新编译发现固件小了二十多K左右,然后启用debug打断点测试成功。
打断点注意在程序必定会进去的地方打才能保证所操作的是对的,Copter.cpp文件的fast_loop()函数是一定会进去的,在里面打就好了。
初次入坑,陈述不对之处请朋友多多指正。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)