Kerloud飞控开发的debug方法
(1)问题说明
有过嵌入式开发经验的朋友应该知道,对于SOC系统比较头疼的问题就是出现程序逻辑错误如何排查了。针对飞控庞大的代码,不太可能通过类似Keil那种step递进的方式进行代码纠错,而且基于Linux的编译环境不允许。因此,不少朋友在接触到开源飞控时都会被卡在这里,无法对程序进行二次开发。
(2)待选方法
- print打印方法
使用print方式可以有效地帮助诊断程序在开发过程中的问题。虽然这个方式不是最有效率的方式,但在底层硬件层开发时该方法是比较直观有效的。
- 软件在环仿真:
px4飞控自带的软件在环仿真(software in the loop)方法也是常用的程序排查方式之一,可以对任务上层的逻辑进行方便的显示,而且不依赖硬件。
(3)如何操作
- print打印方法
Kerloud飞控提供了debug端口,可以在程序中打印相应消息输出到对应的串口。对于Kerloud mini飞控,debug端口对应到主芯片STM32F427VIT6的uart7,可以通过USB-TTL工具将该串口连接到USB端口,接入电脑中查看消息。
我们推荐的USB-TTL工具链接(注意在淘宝上有较多FTDI的串口产品,但质量差别很大):
https://detail.tmall.com/item.htm?_u=a27aeeg222e&id=543813433323
在飞控软件中,我们可以在驱动和module中使用printf或者PX4_INFO()等函数来打印相应的函数变量。
在ubuntu系统中,我们可以通过以下命令查看来自串口的信息,注意在操作时不要启动Qgroundcontrol地面站防止串口冲突,同时需要通过ls /dev/tty*来查看对应的串口标识。
sudo apt-get install screen
screen /dev/ttyXXX 57600 8N1
更多参考信息:
https://docs.px4.io/main/en/debug/system_console.html
- 软件在环仿真
软件在环仿真的操作指令为:
make px4_sitl_default gazebo
在飞控软件中,我们可以在module中使用printf或者PX4_INFO()等函数来打印相应的函数变量。启动软件在环指令后我们即可以在终端查看对应的消息了。这个方法的缺点是如果打印速度太快,有的消息显示不出来,另外该方法不支持驱动层的排查。