第二章 第一节 UAVCAN数据结构DSDL原理 -闫刚


DSDL包含了UAVCAN的所有数据结构, 它是python写的自动化生成头文件hpp的工具。学会它,我们基本可以了解到UAVCAN中最核心的通信结构。

1.  UAVCAN如何生成头文件hpp ?带着疑问,我们找到一些突破点

1.1 通过查看单板,我们尝试使用1个单板进行自动编译UAVCAN, 我们查看nuttx-config目录,我们找到单板

由于px4cannode-v1是基于UAVCAN典型的1个例子,编译整个make px4cannode-v1

1.2  . 由于UAVCAN是通过CMAKE构建的,我们分析一下UAVCAN下的CAMKE,

$ vi ./libuavcan/CMakeLists.txt


我给大家分析下这个CMakeList.txt的

  • DSDLC_INPUTS = test/dsdl_test/root_ns_a" "test/dsdl_test/root_ns_b" "${CMAKE_CURRENT_SOURCE_DIR}/../dsdl/uavcan
  • DSDLC_OUTPUT  = "include/dsdlc_generated"

  从这里,我们基本就可以知道,这个DSDL基本的工作就是把输入文件转换成头文件,我也知道了输入文件的路劲,保存到了${DSDLC_INPUTS} 这个环境变量中, 输出文件保存到了${DSDLC_OUTPUT }文件

  • 如何解析这些文件,从下面图片,我基本可以知道python解析了${CMAKE_CURRENT_SOURCE_DIR}/dsdl_compiler/libuavcan_dsdlc 这个脚本文件


1.3 从上面我们了解到,工具是libuavcan_dsdlc, 输入文件是在dsdl下的所有.uavcan文件,输出文件是在include/dsdlc_generated下,我们下面查看这2个文件夹

1.3.1 查看dsdl下的文件

1.3.2. 查看输出路径下的include/dsdlc_generated



2.我们添加自己的UAVCAN数据如何添加vitual_button文件夹,文件下面有1个文件命名为1500.VitualButton.uavcan

$ touch ./libuavcan/dsdl/uavcan/equipmen./libuavcan/dsdl/uavcan/equipmen/vitual_button

$ cat ./libuavcan/dsdl/uavcan/equipmen/vitual_button/1500.VitualButton.uavcan

uint8 value  # range 0 to 255

我们如何编译成功,会在include/dsdlc_generatd中生成1个文件夹是include/dsdlc_generated,文件名字应该是VitualButton.hpp文件

执行命令:

/usr/bin/python /home/yangang/work/px4/Firmware/src/modules/uavcan/libuavcan/libuavcan/dsdl_compiler/libuavcan_dsdlc /home/yangang/work/px4/Firmware/src/modules/uavcan/libuavcan/libuavcan/../dsdl/uavcan -Oinclude/dsdlc_generated

输出文件:查看



到这里,我们学习到了UAVCAN中dsdl的核心处理方式,让我们更加了解UAVCAN的数据结构


猜你喜欢

转载自blog.csdn.net/yangang185/article/details/80152769