当前位置:首页 >> 信息与通信 >>

ZigBee协议栈OSAL介绍


讨论 ZigBee 协议栈的构成以及内部 OSAL 的工作机理。 ZigBee 协议栈 OSAL 介绍 操作系统抽象层 OSAL 常用术语: 1.资源(Resource):任何任务所占用的实体都叫资源,如变量、数组、结构体 2.共享资源 (Shared Resource) 两个或两个以上任务使用的资源, : 为防止破坏资源, 任务在操作共享资源时是独占状态。 3.任务(Task):即线程,简单的程序的执行过程。任务设计时将问题尽可能分成多个 任务,每个任务独立完成某项功能,同时赋予优先级、CPU 寄存器和堆栈空间。一般一个 任务设计为一个无限循环。 4.多任务运行(Muti-task Running):其实同一时刻只有一个任务运行。 5.内核(Kernel):内核负责管理各个任务。包括:分配 CPU 时间;任务调度;任务 间的通信。 6.互斥(Mutual Exclusion):多任务通信最常用方法是共享数据结构。 保护共享资源常用的方法: 关中断; 使用测试并置位指令(T&S 指令); 禁止任务切换; 使用信号量; 7.消息队列(Message Queue):用于任务间传递消息。 OSAL 提供如下功能: 任务注册、初始化和启动; 任务间的同步、互斥; 中断处理; 储存器分配和管理; OSAL 运行机理: OSAL 就是一种支持多任务运行的系统资源分配机制。 OSAL 是一种基于事件驱动的轮询式操作系统。、 void osal_start_system(void)是 ZigBee 协议栈的灵魂,不断的查看事件列表,如果有 事件发生就调用相应的事件处理函数。 SYS_EVENT_MSG 是一个事件集合,是由协议栈定义的事件,即系统强制事件 (Mandatory Events),它的定义为: #define SYS_EVENT_MSG 它包含如下事件: AF_INCOMING_MSG_CMD 收到一个新的无线数据 0x8000;

ZDO_STATE_CHANGE 向协调器发送数据包。 ZDO_CB_MSG 息。 OSAL 消息队列 消息与事件的区别: 消息:事件和数据的封装

网络状态发生变化事件,利用它判断终端加入网络后何时

指示所有注册的 ZDO 响应消息。 调用 AF_DataRequest()发送数据时,需要确认信

AF_DATA_CONFIRM_CMD

事件:驱动任务去执行某些操作的条件 OSAL 维护一个消息队列,即消息链表 OSAL 添加新任务 要添加新任务要编写两个函数: 1.新任务的初始化函数 2.新任务的事件处理函数 OSAL 应用编程接口 API(Application Programming Interface)有 8 个 消息管理 任务同步 时间管理 中断管理 任务管理 内存管理 电源管理 非易失性闪存管理 消息管理 API: 主要用于处理任务间消息交换, 包括任务分配消息缓存、 释放消息缓存、 接收消息、发送消息 osal_msg_allocate() osal_msg_deallocate() osal_msg_send() osal_msg_receive() osal_set_event() osal_start_timerEx() osal_stop_timerEx() 分配缓存空间 释放消息缓存空间 一个任务从消息队列接收属于自己的消息 运行一个任务设置某一事件 设置一个定时时间,时间到后,相应事件被设置。 停止已启动的定时器 一个任务发送消息到消息队列

任务同步 API:用于任务间的同步,允许一个任务等待某个任务发生。 时间管理 API:用于开启关闭定时器

中断管理 API:用于控制中断的开启和关闭。

很少用 任务管理 API:用于对 OSAL 进行初始化和启动 osal_init_system() osal_start_system() 露。 osal_mem_alloc() osal_mem_free() 在堆上分配指定大小的还存区 释放之前函数分配的缓存区 初始化 OSAL,该函数是第一个被调用的 OSAL 函数 之前重点讲的函数

内存管理 API:用于在堆上分配缓存区,以下的两个 API 函数要成对使用,防止内存泄

电源管理 API:主要用于电池供电的 ZigBee 网络节点 非易失性闪存管理 API:Non-Volatile Memory,NV 一般指 Flash 或 EEPROM,每个 NV 分配唯一的 ID 号。 osal_nv_item_init() osal_nv_read() osal_nv_write() 初始化 NV 条目, 如果 NV 条目不存在, 创建并初始化该条目, 从 NV 条目中读取数据,可读取整条也可读取部分。 写数据到 NV 条目 如果存在,每次调用 osal_nv_read()和 osal_nv_write()之前必须调用该函数。

ZigBee 协议栈中串口应用详解 使用串口的基本步骤: 1.初始化串口,设置波特率、中断等。 2.向发送缓冲区发送数据或者从缓冲区读取数据。 ZigBee 协议栈中提供的与串口相关的函数: HalUARTOpen() HalUARTRead() HalUARTWrite() 回调函数是通过函数指针(函数地址)调用的函数,如果把函数指针作为参数传递给另 一个函数,当通过指针调用它所指向的函数时,称为函数的回调。 回调函数不是由该函数的实现方直接调用的,而是在特定的事件或条件发生时,由另一 方调用的,用于对该事件或条件进行响应。 回调函数机制提供了系统对异步事件的处理能力。 首先将异步事件发生时需要执行的代 码编写成一个函数,并将该函数注册成为回调函数,这样当该异步事件发生时,系统会自动 调用事件注册好的回调函数, 回调函数的注册实际上就是将回调函数的信息填写到一个用于 注册回调函数的结构体变量中。 程序中调用回调函数的步骤: 1.定义回调函数 2.初始化时,提供函数实现的一方将回调函数的函数指针传递给调用者 3.当特定的事件或条件发生时,调用者使用函数指针调用回调函数对事件进行处理。 使用条件编译是因为单片机的存储器资源有限。



相关文章:
基于zigbee协议栈的简单led灯闪烁程序
基于zigbee协议栈的简单led灯闪烁程序_信息与通信_工程科技_专业资料。基于zigbee 2006协议栈的led灯闪烁程序,描述osal中task如何创建,初始化,和事物处理。今日...
Zigbee协议栈系统事件
Zigbee协议栈系统事件_计算机软件及应用_IT/计算机_专业资料。分析了协议栈中一些...osal_start_timerEx()设置一个定时事件, 当时间到达后启用用户自定义事 件 ...
Zigbee组网原理与应用剖析
OSAL 软件功能模块作 为 TIZ-Stack 协议栈中的操作系统抽象层,统一管理协议栈...2 ZigBee 网络节点结构 2.1 硬件模块介绍 TI 公司的 CC2520、CC2530 芯片是...
ZigBee2006 OSAL函数说明
0 if no widget found 完成内存值设置 void *osal_memset( void *dest, byte value, int len ) 本文是作者原创,程序摘自无限龙 ZigBee06 协议栈,转载必须保证...
ZigBee学习之7—OSAL(操作系统抽象层)API解读
ZigBee 学习之 7——OSAL(操作系统抽象层)API 解读 根据 Z-Stack1.4.3-1.2...参数: ptr 电源管理 API 系统为应用/协议栈提供了一个方式用来通知 OSAL 什么...
OSAL zigbee实时操作系统
OSAL zigbee实时操作系统_计算机软件及应用_IT/计算机_专业资料。OSAL 一、概述 OSAL(Operating System Abstraction Layer),翻译为“操作系统抽象层”,OSAL 就是以 ...
Zigbee整理
(MAC 定时器) 第六章 1.Zigbee 协议栈结构与 Zstack 对比: Zigbee 协议栈结构 应用层 ZDO、APS 层 AF 层 NWK MAC 物理层 Zstack APP 层、OSAL ZDO 层 ...
ZigBee学习之33—osal_start_system()
ZigBee学习之33—osal_start_system()_计算机软件及应用_IT/计算机_专业资料。zigbee学习40篇 专注于ZigBee技术!#1 楼主: 【原创】ZigBee 学习之 33——osal_...
20110554008 zigbee
ZigBee 协议栈的实时性要求并不高,因此在设计任务调度程序时,OSAL 只采用了 轮询任务调度队列的方法来进行任务调度管理。 6、zigbee 组网过程分析 设备初始化为协调...
zigbee深入浅出
zigbee深入浅出_法律资料_人文社科_专业资料。zigbee深入浅出osal框架深入...在 Z-Stack 协议栈中,它又扮演了什么角色呢?要解答这些问题,我们必须先从宏观...
更多相关标签: