奥特曼的zigbee读书笔记(三)设备“对话”专题(1)
在这个例程里,除了APP这个文件夹是用来存用户程序的,其他都是由Zstak提供的,APP里有三个文件GenericApp.c(用户程序)、GenericApp.h(用户程序头文件)和OSAL_GenericApp.c(用户程序与OSAL交互程序),三个文件不复杂吧?又有同学举手了?什么?文件里面的内容太复杂了?我们来看看,GenericApp.c有五、六百行,这也算复杂?那好吧,待会我们把它全删了,只留一个按键,一个LED,保证程序干干净净--中国人“奇强” 再来看下这个例程在硬盘里的文件结构,到底哪些是我们需要的?
晕了没?恩,我也有同感,那我们就不看这么复杂的图了,看这个
这个是不是舒服点?这个就是按照我们最小化程序的需要,整理过的所有用得到的文件。其中,只有BeginApp这一个文件夹是我们的用户程序,后面4个全部是TI提供的,我们暂时不去动它。而且项目中已经删除了“EB”“BB”的内容,只保留了“DB”。 有同学要问了,为什么选“DB”,而不是其他的?说实话,到现在我也没仔细研究TI这三个板子对应的软件的具体差异,但是从直观图片来看(请参见日记一中的图片),DB不大不小,应该正好符合我们的要求--不要砸我啊 已经有人等不及了,现在我们就开始看看这个最小化项目是怎么一步步来的吧? -- by outman from feibit.com 2010.5.6 17:54 其实还没下班,不过我决定等回家以后再写了 1. 首先,建空文件夹命名为BeginApp,再在其中建一个名字一样的文件夹专门用来我们自己的内容,进入其中,再建“IAR Project”文件夹用来存放IAR的项目文件。 2. 建一个空的IAR项目,取名BeginApp并保存至“IAR Project”文件夹。详细过程我在这就不赘述了,请参见附件“IAR入门” IAR入门.pdf (900.3 KB) 后面的工作可是要有点耐性,但我觉得每个用IAR学Zigbee的人都应该做一遍,花费半个小时,虽然说没什么技术含量,但是会让你对你一直在用的IAR项目有个全新的认识,而且能和Zstack的文件先混个“眼熟”。。。 3. 详细设置项目参数。打开GenericApp的项目文件,workspace中选择CoordinatorDB,project==>option,打开项目参数设置窗口;同时打开新建的BeginApp项目,在workspace中选择debug,用同样的方法进入参数设置窗口。剩下的就是一项一项地按照GenericApp的设置进行修改啦,这个一定要仔细,如果有一项不对应,可能编译就会有问题。
4. 当你改到有文件路径的地方,比如“C/C++ compiler ==> preprocessor”,这个时候,先跳过去,把其它改好再回来改这个。因为这些地方都是编译器要寻找文件的地方,我们必须要确保里面指定的文件在硬盘的文件夹里能找得到,否则编译会出错。同时,这些地方也告诉我们这个项目到底用到了哪些文件,增加了我们对项目全局的了解。
例如,如上的“preprocessor”中:
$PROJ_DIR$\..\SOURCE
$PROJ_DIR$\..\..\..\ZMAIN\TI2430DB
$PROJ_DIR$\..\..\..\..\..\COMPONENTS\MT
...
在如上的路径中,$PROJ_DIR$指的是IAR的工程文件夹,就是上面我们建的“IAR Project”,“\..”是代表向上一级,那么我们就找到SOURCE、ZMAIN和COMPONENTS这三个必须的文件夹,把SOURCE拷到二级BeginApp文件夹中,另外两个拷到一级BeginApp根目录下,同时上述相应的文件夹位置也要按照新的结构来更改,如$PROJ_DIR$\..\..\..\ZMAIN\TI2430DB就要改为$PROJ_DIR$\..\..\ZMAIN\TI2430DB,以此类推。注:这个文件夹的命名和位置都是不固定的,完全可以按照你的想法来做,我这样命名的目的只是为了区别TI的“库”和我们的“应用”。
另外,在“C/C++ compiler ==> extra options”中,我们又找到了“tools”;在“linker ==> extra options”中我们又找到了这个Libraries,这两个必须的文件夹,也拷到一级BeginApp根目录下。好了,至此,项目需要的文件我们已经按照自己喜欢的方式排列好啦
5. 这一步是最麻烦的,就是按照“GenericApp”里“workspace”下的文件夹和文件一个个添加文件了。这中间遇到“EB”的我们可以不管,因为我们用的是“DB”。
6. 编译。如果上面工作做得仔细,这一步应该是一次性成功。但是又有一个问题:虽然编译成功了,但是我们编译出来的结果和原来的是不是一样的呢?(毕竟我们第一步的目的是造一个一模一样的轮子)
code size!对,如果编译的代码大小一样的话,那基本上能保证完全相同了吧?
那code size及RAM的使用情况等信息在哪里找得到呢?
\BeginApp\BeginApp\IAR Project\Coordinator\List这里面有个“BeginApp.map”文件,打开它,在最底部看一下
****************************************
* *
* END OF CROSS REFERENCE *
* *
****************************************
74 598 bytes of CODE memory
18 bytes of DATA memory (+ 67 absolute )
3 627 bytes of XDATA memory
192 bytes of IDATA memory
8 bits of BIT memory
Errors: none
Warnings: none
就是这里啦,对比一下是不是和原来的一样就OK啦
7. 增加自己的“应用”,在source文件夹中,仿照GenericApp里的源文件,增加三个文件BeginApp.c/BeginApp.h/OSAL_BeginApp.c,然后写自己想写的东西罗
做为最原始的程序,本教程中,采用了一个按键(P0_0)来控制一个LED(P2_0),按一次取一次反。当然,由于开发板的差异性,这个具体的IO定义要根据您的硬件进行修改了。
8. 运行,把上面的程序下载到你自己的板子中,看到LED在“眨眼”了吗
至此,我们就有了一个属于自己的“最小化”项目了,回想一下这个项目里的文件,是不是觉得比看别人给做好的更清爽了呢?
由于本教程不是单片机的入门教程,至于“应用”中的源代码就不再累述了,回头把我做好的整个项目文件共享出来,需要的请自行下载,不过记得雁过留名哦!
现在看了有点晕呼呼了。
学习中!希望能有更多的资料分享
学习中!希望能有更多的资料分享
讲得非常好啊,但是按照步骤做了,就是不行啊,编译不过去,还有那个Tools中的文件怎么加不进去啊?请楼主指教,多谢啦!
为什么看不到图呢?
在TI给的zigbee无线点灯例程中怎么加矩阵键盘 求解
