目录
如何根据源码绘制数据结构?
在学习Contiki系统的过程中,阅读源码是搞清楚实现细节的最好方法。但直接阅读源码有时候也不是很容易的事情,即便有SourceInsight这样的源码阅读利器帮助,你还是时不时会希望能不能看到类的继承关系?能不能看到函数的调用关系?答案是肯定的,搜了一下网上开源的方案不少,例如在emacs中利用Graphviz绘制数据结构图的 、使用编译器特性生成CVG格式的数据结构图的、使用Python或者Java实现这一功能的,等等。但最方便,功能最强大的还是Doxygen+Graphviz。Contiki 是瑞典计算机科学学院的大牛Adam Dunkels 带领团队开发的适用于MCU构成的传感器网络节点的嵌入式操作系统。Contiki麻雀虽小,五脏俱全,集成了uIP协议栈,支持6LoWPAN,代表着传感器网络业界最新的发展方向。其文档也相当的完善,是使用Doxygen自动生成的,但默认没有打开绘制数据结构和调用图的功能,我们只需要将其打开即可,一行代码都不用写。
安装Doxygen和Graphviz
Doxygen和Graphviz都可以从前面给出的官方网站下载源码,Doxygen还可以从github获取。Ubuntu的各个版本都有集成,这里也不用专门定制,就用包管理器直接安装了:
# aptitude install graphviz doxygen
安装完后运行一下dot (graphviz默认用于有向图绘制的工具),确认graphviz能够正常工作:
# dot -V
# dot - graphviz version 2.26.3 (20100126.1600)
修改Doxygen配置文件并运行doxygen
用Doxygen生成html文档非常的简单,只需要设置好配置文件,让Doxygen扫描源码目录,Doxygen便能根据配置生成需要的描述信息并进行组织,使得使用者可以按照软件开发者在代码中提供的注释信息和帮助文档按图索骥。这里我们不需要生成全新的配置文件并进行配置,contiki源码目录下的doc/Doxyfile就是contiki项目所使用的配置文件。我们只需要复制一份到工作目录(例如新建一个my_doc,避免污染源文档目录)并打开相应的选项。配置文件里#开头的为注释,中文为我自己添加的说明。配置选项非常的多,可以参考Doxygen文档config一节 的说明进行配置
# Doxyfile 1.4.1
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
PROJECT_NAME = "Contiki 2.6"
PROJECT_NUMBER =
OUTPUT_DIRECTORY = my_doc #生成的html和latex文档及doxygen的日志会放到这个目录下
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
USE_WINDOWS_ENCODING = YES
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = $(docroot)
STRIP_FROM_INC_PATH = $(docroot)
SHORT_NAMES = YES
JAVADOC_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = YES
INHERIT_DOCS = YES
DISTRIBUTE_GROUP_DOC = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES # Contiki主要是C代码,所以C-YES,Java-NO
OPTIMIZE_OUTPUT_JAVA = NO
SUBGROUPING = YES