deafguy 发表于 2011-12-21 08:43

GenericApp Workspace中不同Configuration的区别

<div align="center"><font size="4" face="黑体">
GenericApp Workspace中不同Configuration的区别</font><br>
<i>&nbsp;---- 以CoordinatorDB 和 RouterDB 为例<br></i></div><br><br>开始的猜想:这个configuration无非就是在编译的时候做些小动作,根据一些Macron(宏定义),编译不同的代码,实现Coordinator或者Router的功能。<br>根据这个猜想,开始寻找项目中的Preprocessor中的预定义Macron。<br><br>打开:“Project &gt; Options... &gt; C/C++ Compiler &gt; Preprocessor”<br>CoordinatorDB 和 RouterDB 的 Defined Symbols 定义如下:<br>&nbsp;&nbsp;&nbsp; CoordinatorDB<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CC2430DB<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; REFLECTOR<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; xZTOOL_P2<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; xMT_TASK<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; xMT_ZDO_FUNC<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; xLCD_SUPPORTED=DEBUG<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; RouterDB<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CC2430DB<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; REFLECTOR<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; xZTOOL_P2<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; xMT_TASK<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; xMT_ZDO_FUNC<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; xLCD_SUPPORTED=DEBUG<br><br>见鬼,居然一样!!!但是常识告诉我,不同的Configuration之间,肯定有些设置是不一样的。<br>在 Samples\GenericApp\CC2430DB 目录下,除了workspace文件 GenericApp.eww之外,还有GenericApp.dep,GenericApp.ewd,GenericApp.ewp。<br>首先, 使用VIM(或者notepad)打开GenericApp.ewd。发现针对CoordinatorDB 和 RouterDB有不同的设置。抠出来,存储为两个文件:cor.ewd, rut.ewd。<br>然后使用diff对比(cygwin下的diff,模拟Unix系统下的diff):<br>&gt;<br>&nbsp;&nbsp;&nbsp; caogui@gcao1 /cygdrive/c/tmp<br>&nbsp;&nbsp;&nbsp; $ diff cor.ewd rut.ewd<br>&nbsp;&nbsp;&nbsp; 3c3<br>&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;CoordinatorDB&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp; ---<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;RouterDB&lt;/name&gt; <br>&lt;<br><br>居然出了开始的名称,其他设置都是一样的!!!<br><br>不管,检查另一个文件:GenericApp.ewp。一样的原理,抠出来,存储为两个文件:cor.ewp, rut.ewp。然后diff对比:<br>&gt;&gt;&gt;&gt;<br>&nbsp;&nbsp;&nbsp; caogui@gcao1 /cygdrive/c/tmp<br>&nbsp;&nbsp;&nbsp; $ diff cor.ewp rut.ewp<br>&nbsp;&nbsp;&nbsp; 6c6<br>&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;CoordinatorDB&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp; ---<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;RouterDB&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp; 138c138<br>&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;state&gt;CoordinatorDB\Exe&lt;/state&gt; <br>&nbsp;&nbsp;&nbsp; ---<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;state&gt;RouterDB\Exe&lt;/state&gt; <br>&nbsp;&nbsp;&nbsp; 142c142<br>&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;state&gt;CoordinatorDB\Obj&lt;/state&gt;<br>&nbsp;&nbsp;&nbsp; ---<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;state&gt;RouterDB\Obj&lt;/state&gt;<br>&nbsp;&nbsp;&nbsp; 146c146<br>&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;state&gt;CoordinatorDB\List&lt;/state&gt;<br>&nbsp;&nbsp;&nbsp; ---<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;state&gt;RouterDB\List&lt;/state&gt;<br>&nbsp;&nbsp;&nbsp; 445c445<br>&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;state&gt;-f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wCoord.cfg&lt;/state&gt;<br>&nbsp;&nbsp;&nbsp; ---<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;state&gt;-f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wRouter.cfg&lt;/state&gt; <br>&nbsp;&nbsp;&nbsp; <br>&lt;&lt;&lt;&lt;<br><br>终于找到不同了!<br>CoordinatorDB 引用配置文件 $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wCoord.cfg<br>RouterDB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 引用配置文件 $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wRouter.cfg<br><br>文件路径:c:/Texas Instruments/ZStack-1.4.3/Projects/zstack/Tools/CC2430DB<br><br>打开这些文件,开始的注释说明了文件的用途:<br>这些文件定义了 'Compiler command-line options used to define an F8W Z-Stack Coordinator/ Router device'<br><br><br>细看文件内容,发现CoordinatorDB 比 RouterDB 多定义了一个Macron ZDO_COORDINATOR: <br><br>f8wCoord.cfg (部分):<br>&gt;&gt;&gt;&gt;<br>&nbsp;&nbsp;&nbsp; /* Coordinator Settings */<br>&nbsp;&nbsp;&nbsp; -DZDO_COORDINATOR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Coordinator Functions<br>&nbsp;&nbsp;&nbsp; -DRTR_NWK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Router Functions<br>&lt;&lt;&lt;&lt;<br><br>f8wRouter.cfg (部分):<br>&gt;&gt;&gt;&gt;<br>&nbsp;&nbsp;&nbsp; /* Router Settings */<br>&nbsp;&nbsp;&nbsp; -DRTR_NWK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Router Functions<br>&lt;&lt;&lt;&lt;<br><br><br>不到黄河不死心!看看到底Coordinator和Router有哪些不同的代码。在Project目录搜索所有的 *.c 文件,找出含有 ZDO_COORDINATOR 字符串的文件!<br>使用cygwin的 grep + find 功能。没有的话,使用Windows查找应该也能找到(If you have good luck.)。<br><font size="1">&gt;&gt;&gt;&gt;<br>&nbsp;&nbsp;&nbsp; caogui@gcao1 /cygdrive/c/Texas Instruments/ZStack-1.4.3<br>&nbsp;&nbsp;&nbsp; $ grep -n ZDO_COORDINATOR `find . -name *.c`<br>&nbsp;&nbsp;&nbsp; ./Components/mt/DebugTrace.c:118:#if defined ( APP_DEBUG ) &amp;&amp; !defined (ZDO_COORDINATOR)<br>&nbsp;&nbsp;&nbsp; ./Components/mt/MTEL.c:781:#if defined (ZDO_COORDINATOR)<br>&nbsp;&nbsp;&nbsp; ./Components/mt/MTEL.c:787:#if defined (RTR_NWK) &amp;&amp; !defined (ZDO_COORDINATOR)<br>&nbsp;&nbsp;&nbsp; ./Components/mt/MT_NWK.c:157:#if defined( ZDO_COORDINATOR )<br>&nbsp;&nbsp;&nbsp; ./Components/mt/MT_NWK.c:207:#if defined( ZDO_COORDINATOR )<br>&nbsp;&nbsp;&nbsp; ./Components/mt/MT_NWK.c:285:#if !defined( ZDO_COORDINATOR )<br>&nbsp;&nbsp;&nbsp; ./Components/mt/MT_NWK.c:428:#if defined( ZDO_COORDINATOR )<br>&nbsp;&nbsp;&nbsp; ./Components/mt/MT_NWK.c:431:#endif&nbsp; // ZDO_COORDINATOR<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:232:#if defined( ZDO_COORDINATOR ) &amp;&amp; !defined( SOFT_START )<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:241:#if !defined( ZDO_COORDINATOR ) || defined( SOFT_START )<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:331:&nbsp;&nbsp;&nbsp; #if !defined (ZDO_COORDINATOR)<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:844:&nbsp; #if defined ( ZDO_COORDINATOR )<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:846:&nbsp; #endif // ZDO_COORDINATOR<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:967:#if !defined ( ZDO_COORDINATOR ) || defined ( SOFT_START )<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:1040:#endif&nbsp; // !ZDO_COORDINATOR<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:1043:#if !defined( ZDO_COORDINATOR ) || defined( SOFT_START )<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:1059:#endif&nbsp; // !ZDO_COORDINATOR<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDApp.c:1070:&nbsp;&nbsp;&nbsp; #if !defined ( ZDO_COORDINATOR ) || defined ( SOFT_START )<br>&nbsp;&nbsp;&nbsp; ... ... ... ...<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDSecMgr.c:2760:#if defined ( ZDO_COORDINATOR )<br>&nbsp;&nbsp;&nbsp; ./Components/stack/zdo/ZDSecMgr.c:2788:#endif // defined ( ZDO_COORDINATOR )<br>&nbsp;&nbsp;&nbsp; ./Projects/zstack/ZMain/TI2430DB/ZMain.c:278:#ifdef ZDO_COORDINATOR<br>&nbsp;&nbsp;&nbsp; ./Projects/zstack/ZMain/TI2430DB/ZMain.c:380:#if defined( ZDO_COORDINATOR )<br>&nbsp;&nbsp;&nbsp; ./Projects/zstack/ZMain/TI2430DB/ZMain.c:386:#if defined( ZDO_COORDINATOR )<br>&lt;&lt;&lt;&lt;</font><br><br>NND, 这么多!有兴趣的朋友自己看吧:) 有什么心得,和大家分享一下。<br><br>
页: [1]
查看完整版本: GenericApp Workspace中不同Configuration的区别