- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Z-Stack2006的简单应用开发
基于Z-Stack2006的简单应用开发
我想很多人都会对“Z-Stack 2006”这个说法产生怀疑。没错!在Z-Stack的所有版本中,并没有“Z-Stack 2006”这个版本。在这里我所指的是Z-Stack针对ZigBee 2006协议的版本。而我所使用的是Z-Stack 1-4-3版本。
我们所熟知的是,Z-Stack是基于OSAL的支持多任务的ZigBee协议栈,在《深入浅出Z-Stack 2006 OSAL多任务资源分配机制》中,我向大家简要分析了OSAL的运行机制。但是对于开发一个满足需求的应用,了解这样一个机制仅仅是一个开始。下面,我将通过一个简单实例,向大家介绍如何进行基于Z-Stack的应用开发。
一、建立工程
我认为反复地使用GenericApp是一件十分恶心的事情。这一次,我们需要拥有一个属于我们自己的工程。
使用IAR建立一个Z-Stack工程是一件十分繁琐并且枯燥的事情,每一层都有太多的文件需要被添加进去。所幸的是,我们有一个很好的投机取巧的办法。
找到GenericApp工程的文件夹,复制此文件夹并且重命名Cyril3App。删除Source目录下的所有文件,然后建立如下几个文件:
Cyril3App.h:定义应用程序全局宏
Cyril3AppCoordManage.c:协调器代码
Cyril3AppCoordManage.h:协调器宏定义
OSAL_Cyril3AppCoord.c:协调器应用框架代码
Cyril3AppRouterManage.c:路由器代码
Cyril3AppRouterManage.h:路由器宏定义
OSAL_Cyril3AppRouter.c:路由器应用框架代码
进入CC2430DB目录,分别将GenericApp.ewp和GenericApp.eww重命名为Cyril3App.ewp和Cyril3App.eww。使用记事本打开这两个文件,将里面所有的GenericApp都改为Cyril3App。我们可以使用查找替换功能来解决。用IAR打开这个工程,将App组里面的文件全部移除。在App组里面新建“Coodinator”和“Router”两个组。分别将路由器和协调器的三个文件加入对应的两个组。这样,一个空的工程就建立好了。
接下来我们就可以在这个工程里面开发我们的应用了。
抛开实用性,我们仅仅来关注技术层面所发生的事情。所以,请大家不要来指责我这个东西没有任何实用性,我只是抛砖引玉。功能更加强大,更实用的应用程序需要大家去完成。
既然OSAL可以支持多任务,那么我们就为我们的应用设计两个任务。第一个任务在应用层面上为我们管理整个网络的节点,第二个任务我们来做一些简单的操作。接下来我们要干点实事了。
二、建立应用程序。
OSAL框架在背后为我们做了很多我们不容易发现却很重要的事情,但是即使这样,我们仍然需要自己做一些事情来完成这个应用程序框架。切换工作空间配置到CoordinatorDB,将Router组排除编译(右键单击组名,选择Options,将左上角的“Exclude from build”的勾选去除)。打开“OSAL_Cyril3AppCoord.c”在这个文件里面,我们完成OSAL应用程序框架的最后一些事情。
1,添加如下代码:
const pTaskEventHandlerFn tasksArr[] =
{
macEventLoop,
nwk_event_loop,
Hal_ProcessEvent,
APS_event_loop,
ZDApp_event_loop,
};
uint16 *tasksEvents = NULL;
const uint8 tasksCnt = sizeof(tasksArr) / sizeof(pTaskEventHandlerFn);
此代码包含了OSAL的两个十分重要的全局变量。tasksArr保存了当前应用程序中所有的任务处理函数,当某个任务有需要响应的事件时,此任务处理函数将会被调用。当然每一个任务都只有一个任务处理函数,所以任务处理函数可以标识一个任务。tasksEvents记录了当前所有任务的状态,它的初始值为0,当某个任务接收到某个事件时,相对应的位会置1。由于任务的数量一个不确定的值,所以tasksEvents的空间应该是动态分配的。这里我们仅仅定义了一个这样的指针,稍后再为它分配空间。tasksCnt记录了任务数量。
2,设计我们的应用程序任务初始化函数:
在OSAL_Cyril3.c中添加如下函数,
void osalInitTasks( void )
{
您可能关注的文档
最近下载
- 新人教版高中数学必修第二册统计全套课件.pptx VIP
- 台球厅消防安全应急预案.docx VIP
- 海外代理协议合同协议.docx VIP
- 初中教科研课题:《初中语文预习方法研究》课题研究工作报告.doc VIP
- 2025至2030年中国新疆维吾尔自治区建筑市场运行态势及行业发展前景预测报告.docx
- 简述10KV 高压配电柜安装.doc VIP
- GB50148-2010 电气装置安装工程电力变压器油浸电抗器、互感器施工及验收规范.pdf VIP
- 2025航天恒星科技有限公司招聘80+人笔试历年参考题库附带答案详解.pdf
- RB∕T 174-2021 司法鉴定法庭科学机构能力专业要求.pdf
- CP-717安装指南.doc VIP
文档评论(0)