(zigbee学习总结一)zigbee协议栈中OSAL运行机理

在基于zigbee协议栈的应用程序开发过程中,用户只需要实现应用层的开发即可,zigbee应用程序框架中包含了最多240个应用程序对象,每个应用程序对象运行在不同的端口上,因此端口的最作用是区分不同的应用程序对象,可以把一个应用程序对象看成为一个任务。因此,需要一个机制来实现任务的切换、同步和互斥,这就是OSAL产生的根源。

OSAL用一句话来说就是指支持多任务运行的系统资源分配机制。OSAL中有三个参数非常重要,即:tasksCnt、tasksEvent[]和tasksArr[]。

(1)tasksCnt:该变量用于保存任务总数;在Samples\GenericApp\CC2530DB\中可以可以看到

    const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );   //将总任务数赋值给tasksCnt

(2)tasksEvent[]:是一个数组,其中每一项表示与其相对应的任务发生的事件,例如 tasksEvent[1]=2,则表示任务1发生了事件2。

(3)tasksArr[]:是一个指针数组,其中每一项均指向对应任务的事件处理函数,例如tasksArr[1]的值为任务1的事件处理函数的地址。在Samples\GenericApp\CC2530DB\中可以可以看到:

const pTaskEventHandlerFn tasksArr[] =

{

macEventLoop,

nwk_event_loop,

Hal_ProcessEvent,

#if defined( MT_TASK )

MT_ProcessEvent,

#endif

APS_event_loop,

#if defined ( ZIGBEE_FRAGMENTATION )

APSF_ProcessEvent,

#endif

ZDApp_event_loop,

#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )

ZDNwkMgr_event_loop,

#endif

GenericApp_ProcessEvent

};

用户自己创建的任务GenericApp的事件处理函数GenericApp_ProcessEvent()的地址赋值给了tasksArr[]中的对应项。

在ZMain.c中找到主函数,在主函数中调用了 osal_start_system(),进入该函数,可以看到for死循环中调用了 osal_run_system()函数,进入该函数,去掉一些不必要的代码后如下

void osal_run_system( void )

{

uint8 idx = 0;                   //任务索引

osalTimeUpdate();     Hal_ProcessPoll();

do {

if (tasksEvents[idx])  // 不断查询各个任务当前发生的事件是否为0(在系统初始化过程中把各个任务的事件初始化为0  )

{

break;                   //有任务发生的事件不为0,则跳出do-while循环

}

} while (++idx < tasksCnt);

if (idx < tasksCnt)

{

uint16 events;

events = tasksEvents[idx];

tasksEvents[idx] = 0;                           // 重置该任务事件为0.

events = (tasksArr[idx])( idx, events );  //调用该任务事件处理函数

tasksEvents[idx] |= events;                   //返回没有处理的事件

}

}

在上面的程序中我们可以看到for死循环中,不断查询各个任务的tasksEvents[]来确定各个任务是否有事件发生,如果有事件发生则调用对应任务的事件处理函数。每个任务只有一个事件处理函数,在这一个任务处理函数中对该任务发生的不同事件进行处理。于是OSAL就在for循环这样的运行了起来。

时间: 2024-10-20 02:46:31

(zigbee学习总结一)zigbee协议栈中OSAL运行机理的相关文章

zigbee学习之路(一):zigbee介绍

一.前言 大家好,我是一名在校的大学生,最近对zigbee非常感兴趣,于是自己从网上买了一款秉火cc2530的zigbee开发板,想通过这个平台来和大家分享自己学习和研究的经历,下面就来简单的介绍下zigbee 二.zigbee定义 ZigBee是基于IEEE802.15.4标准的低功耗局域网协议.根据国际标准规定,ZigBee技术是一种短距离.低功耗的无线通信技术.这一名称(又称紫蜂协议)来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和"嗡嗡"(zig)地抖动翅膀的"舞蹈&

zigbee 学习笔记

在德州仪器的站点:http://www.ti.com.cn/tool/cn/z-stack上下载安装zigbee2007协议栈版,我的是ZStack-CC2530-2.3.0-1.4.0. 以下演示一个简单的用zigbee通信的样例: 完毕这个样例须要两个zigbee的模块,一个用作协调器(Coordinator)(起建立zigbee网络和与上位机通信的作用)一个用作终端设备(Enddevice)(起採集数据.增加建立的zigbee网络),这里须要实现的功能是先由协调器建立网络,终端设备增加网络

ZigBee学习四 无线+UART通信

ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique message ID (counter) afAddrType_t GenericApp_DstAddr; //unsigned char uartbuf[128];/********************************************************************** L

ZigBee学习笔记一

初学ZigBee, 记录笔记,交流分享, 如有指教,不胜感激! 1: ZigBee是一种协议,由ZigBee联盟制定. ZigBee联盟是一个高速增长的非牟利业界组织,成员包括国际著名半导体生产商.技术提供者.代工生产商以及最终使用者. 2:所谓协议,即一种通讯方式. 例如,人与人之间的通讯方式是 普通话.普通话就是一种协议. 在日常生活中,网吧局域网,运用一种叫 以太网协议,用于不同计算机之间的交流. 而ZigBee 是用于无线传感器只见交流的一种通讯方式. 3:无线传感(器)网络(WSN):

ZigBee学习三 UART通信

ZigBee学习三 UART通信 本实验只对coordinator.c文件进行改动就可以实现串口的收发. 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique message ID (counter) afAddrType_t GenericApp_DstAddr; unsigned char uartbuf[128];/**************************************************

解析Zigbee技术在智能家居应用中的优缺点

ZigBee技术最佳应用范围是无线传感网络中,例如水文监测,污染监测等场景中.这些应用场景往往需要多个节电自组网,相互之间传输数据,便于维护和扩容.今年来,国内外也有很多厂家把Zigbee技术应用在智能家居的场景中,下面,我们就看看Zigbee技术在智能家居中,到底有哪些优缺点呢? ZIGBEE技术简介 Zigbee是基于IEEE802.15.4的通信协议,IEEE802.15.4处理低级MAC层和物理层协议,而Zigbee协议对网络层和API进行了标准化.Zigbee完全协议用于一次可直接连接

Maven学习笔记之——仓库(中)

Maven学习笔记之--仓库(中) 1.    远程仓库的配置 当出现默认的中央仓库无法满足我们的需求或者连接不上的时候.我们可以通过POM文件来指定远程仓库. <repositories> <repository> <id>jboss-maven2-release-repository</id> <name>JBoss Repository</name> <url>http://repository.jboss.org/

Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这部分内容需要以下Jar包支持 mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁: MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架: log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录: 修改后的pom.xm

php学习之道:php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正"办事"的那个,提供一种办事接口的统称. WSDL提供"能办的事的文档说明":  对要提供的服务的一种描述格式.我想帮你的忙,但是我要告诉你我都能干什么,以及干这些事情需要的参数类型. SOAP提供"请求"的规范:  向服务接口传递请求的格式,包括方法和参数等.你想让人家办事,总得告诉人家