免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1296 | 回复: 0
打印 上一主题 下一主题

GenericApp Workspace中不同Configuration的区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:43 |只看该作者 |倒序浏览
[zigbee] GenericApp Workspace中不同Configuration的区别
 ---- 以CoordinatorDB 和 RouterDB 为例


开始的猜想:这个configuration无非就是在编译的时候做些小动作,根据一些Macron(宏定义),编译不同的代码,实现Coordinator或者Router的功能。
根据这个猜想,开始寻找项目中的Preprocessor中的预定义Macron。

打开:“Project > Options... > C/C++ Compiler > Preprocessor”
CoordinatorDB 和 RouterDB 的 Defined Symbols 定义如下:
    CoordinatorDB
        CC2430DB
        REFLECTOR
        xZTOOL_P2
        xMT_TASK
        xMT_ZDO_FUNC
        xLCD_SUPPORTED=DEBUG
           
    RouterDB
        CC2430DB
        REFLECTOR
        xZTOOL_P2
        xMT_TASK
        xMT_ZDO_FUNC
        xLCD_SUPPORTED=DEBUG

见鬼,居然一样!!!但是常识告诉我,不同的Configuration之间,肯定有些设置是不一样的。
在 Samples\GenericApp\CC2430DB 目录下,除了workspace文件 GenericApp.eww之外,还有GenericApp.dep,GenericApp.ewd,GenericApp.ewp。
首先, 使用VIM(或者notepad)打开GenericApp.ewd。发现针对CoordinatorDB 和 RouterDB有不同的设置。抠出来,存储为两个文件:cor.ewd, rut.ewd。
然后使用diff对比(cygwin下的diff,模拟Unix系统下的diff):
>
    caogui@gcao1 /cygdrive/c/tmp
    $ diff cor.ewd rut.ewd
    3c3
    <     <name>CoordinatorDB</name>
    ---
    >     <name>RouterDB</name>
<

居然出了开始的名称,其他设置都是一样的!!!

不管,检查另一个文件:GenericApp.ewp。一样的原理,抠出来,存储为两个文件:cor.ewp, rut.ewp。然后diff对比:
>>>>
    caogui@gcao1 /cygdrive/c/tmp
    $ diff cor.ewp rut.ewp
    6c6
    <     <name>CoordinatorDB</name>
    ---
    >     <name>RouterDB</name>
    138c138
    <           <state>CoordinatorDB\Exe</state>
    ---
    >           <state>RouterDB\Exe</state>
    142c142
    <           <state>CoordinatorDB\Obj</state>
    ---
    >           <state>RouterDB\Obj</state>
    146c146
    <           <state>CoordinatorDB\List</state>
    ---
    >           <state>RouterDB\List</state>
    445c445
    <           <state>-f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wCoord.cfg</state>
    ---
    >           <state>-f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wRouter.cfg</state>
   
<<<<

终于找到不同了!
CoordinatorDB 引用配置文件 $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wCoord.cfg
RouterDB      引用配置文件 $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wRouter.cfg

文件路径:c:/Texas Instruments/ZStack-1.4.3/Projects/zstack/Tools/CC2430DB

打开这些文件,开始的注释说明了文件的用途:
这些文件定义了 'Compiler command-line options used to define an F8W Z-Stack Coordinator/ Router device'


细看文件内容,发现CoordinatorDB 比 RouterDB 多定义了一个Macron ZDO_COORDINATOR:

f8wCoord.cfg (部分):
>>>>
    /* Coordinator Settings */
    -DZDO_COORDINATOR                  // Coordinator Functions
    -DRTR_NWK                          // Router Functions
<<<<

f8wRouter.cfg (部分):
>>>>
    /* Router Settings */
    -DRTR_NWK                          // Router Functions
<<<<


不到黄河不死心!看看到底Coordinator和Router有哪些不同的代码。在Project目录搜索所有的 *.c 文件,找出含有 ZDO_COORDINATOR 字符串的文件!
使用cygwin的 grep + find 功能。没有的话,使用Windows查找应该也能找到(If you have good luck.)。
>>>>
    caogui@gcao1 /cygdrive/c/Texas Instruments/ZStack-1.4.3
    $ grep -n ZDO_COORDINATOR `find . -name *.c`
    ./Components/mt/DebugTrace.c:118:#if defined ( APP_DEBUG ) && !defined (ZDO_COORDINATOR)
    ./Components/mt/MTEL.c:781:#if defined (ZDO_COORDINATOR)
    ./Components/mt/MTEL.c:787:#if defined (RTR_NWK) && !defined (ZDO_COORDINATOR)
    ./Components/mt/MT_NWK.c:157:#if defined( ZDO_COORDINATOR )
    ./Components/mt/MT_NWK.c:207:#if defined( ZDO_COORDINATOR )
    ./Components/mt/MT_NWK.c:285:#if !defined( ZDO_COORDINATOR )
    ./Components/mt/MT_NWK.c:428:#if defined( ZDO_COORDINATOR )
    ./Components/mt/MT_NWK.c:431:#endif  // ZDO_COORDINATOR
    ./Components/stack/zdo/ZDApp.c:232:#if defined( ZDO_COORDINATOR ) && !defined( SOFT_START )
    ./Components/stack/zdo/ZDApp.c:241:#if !defined( ZDO_COORDINATOR ) || defined( SOFT_START )
    ./Components/stack/zdo/ZDApp.c:331:    #if !defined (ZDO_COORDINATOR)
    ./Components/stack/zdo/ZDApp.c:844:  #if defined ( ZDO_COORDINATOR )
    ./Components/stack/zdo/ZDApp.c:846:  #endif // ZDO_COORDINATOR
    ./Components/stack/zdo/ZDApp.c:967:#if !defined ( ZDO_COORDINATOR ) || defined ( SOFT_START )
    ./Components/stack/zdo/ZDApp.c:1040:#endif  // !ZDO_COORDINATOR
    ./Components/stack/zdo/ZDApp.c:1043:#if !defined( ZDO_COORDINATOR ) || defined( SOFT_START )
    ./Components/stack/zdo/ZDApp.c:1059:#endif  // !ZDO_COORDINATOR
    ./Components/stack/zdo/ZDApp.c:1070:    #if !defined ( ZDO_COORDINATOR ) || defined ( SOFT_START )
    ... ... ... ...
    ./Components/stack/zdo/ZDSecMgr.c:2760:#if defined ( ZDO_COORDINATOR )
    ./Components/stack/zdo/ZDSecMgr.c:2788:#endif // defined ( ZDO_COORDINATOR )
    ./Projects/zstack/ZMain/TI2430DB/ZMain.c:278:#ifdef ZDO_COORDINATOR
    ./Projects/zstack/ZMain/TI2430DB/ZMain.c:380:#if defined( ZDO_COORDINATOR )
    ./Projects/zstack/ZMain/TI2430DB/ZMain.c:386:#if defined( ZDO_COORDINATOR )
<<<<


NND, 这么多!有兴趣的朋友自己看吧:) 有什么心得,和大家分享一下。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP