本帖最后由 zk_sima 于 2014-4-28 22:20 编辑
第一次在论坛中发技术贴,潜水1年了,最新想应聘论坛IO技术模块的版主,所以迫使自己多发些帖子来吸引眼球,并希望大家一起来讨论。
好了,开始正文了。
背景:
本人计算机专业,大概1年前玩过flightgear,但没看过源码。工作中会接触到很多航电知识,最近需要用到飞行模型,所以就搭建了flightgear编译环境,学习和修改flightgear。
分割线
------------------------------------------------------------------------------------------------------------------------------------------------------
Flightgear的NetWork对应的是其数据的IO,flightgear定义了多种协议来对应各自的IO接口,每个协议都定义为FGProtocol类型。在程序中,如果需要flightgear提供这些接口则需要提供命令行参数来告知flightgear,flightgear在启动后会首先解析参数,根据不同的参数类型去初始化对应的IO,外部程序利用该IO与flightgear进行数据交互。 参数解析过程 Flightgear启动后开始调用fgMainInit,该函数是程序的入口函数,在该函数里通过调用fgInitConfig来解析参数。在fgInitConfig中创建Options对象,该对象用来解析和处理命令行参数,随后调用Options::init来对命令行的初步解析。在init中调用Options::parseOption,该函数判断参数的类型是否符合要求同时根据不同的参数类型进行不同的处理,如果类型为”—prop:”则直接创建参数类型描述和参数值对OptionValue(OptionDesc,cmdValue)并加入到Options对象中;如果类型为genric、mative等则调用addOption,在Options::addOption中创建OptionValue并加入到Options对象中。之后在fgInitConfig中调用Options::processOptions,在processOptions中对Options对象中的每个OptionValue调用Options::OptionsPrivate::processOption,在processOption中,首先判断参数的类型(在这里,我们暂时只讨论OPTION_CHANNEL),如果为OPTION_CHANNEL则调用add_channel把每个参数及值插入到FGGlobals::channel_options_list中。 流程图如下: 如参数为:“--protocol=medium,direction,hz,medium_options,...“经过初始之后会以:“protocol,medium,direction,hz,medium_options,...”格式的字符串存储在FGGlobals::channel_options_list中。
明天继续更新,希望大家指正。
email:zk.sima@gmail.com
|