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

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学习笔记_图文
操作系统实体只有一行代码:Osal_start_system(); // No Return from here ...Zigbee协议栈--Z-Stack的使用使用方法简介:一般情况下用户只需要额外添加三个...
ZigBee协议栈OSAL层API函数(译)
ZigBee2007协议栈API函数... 57页 1下载券 ZigBee学习之7——OSAL(... 4页 2下载券 zigbee协议栈osal任务分... 7页 1下载券 ZigBee协议栈OSAL介绍 3页 1...
TI_06版Zigbee协议栈学习_01
TI_06 版 Zigbee 协议栈学习_01 整个协议栈是以一个 OS 贯穿的,我们要加入自己的应用,就要添加一个任 务,在任务中执行,与协议栈连接。首先在 OSAL_Task.h ...
zigbee协议栈osal任务分配机制
zigbee协议栈osal任务分配机制_信息与通信_工程科技_专业资料。zigbee协议栈Zstack轮询系统osal的任务分配机制研究 一、概述 OSAL (Operating System Abstraction Layer)...
Zigbee协议栈OSAL层API函数
Zigbee协议栈OSAL层API函数_信息与通信_工程科技_专业资料。Zigbee 协议栈 OSAL 层 API 函数 (2010-11-19 21:18) 分类: ZigBee 技术学习 OSAL 层提供了很多的...
OSAL的工作原理
OSAL的工作原理_计算机软件及应用_IT/计算机_专业资料。OSAL 的工作原理 ZigBee 协议栈依据 IEEE 802.15.4 标准和 ZigBee 协议规范。 ZigBee 网络中的各种操作...
ZigBee协议栈任务处理分析笔记
ZigBee 协议栈中任务的处理总结起来就一句话:任何一个任务都只有调用了函数 osal_set_event()之后才能被处理。 当然事件与任务不是一回事,任务同中断一样只是...
ZigBee协议栈初始化网络启动流程
ZigBee 协议栈初始化网络启动流程 ZigBee 的基本流程:由协调器的组网(创建 PAN ID),终端设备和路由设备发现网络 以及加入网络。 基本流程:main()->osal_init_...
揭开ZigBee 2006协议栈Z-Stack的”开源“面纱
osal 包含了操作系统抽象层所需要的文件 5)service 文件夹保护了 Z-Stack 提供...这里介绍一个专门研究开源 ZigBee 协议的网站,主要是 frankz 协议栈,已 经写...
zigbee协议无线通信的实现
下面以ZIGBEE协议建立网状网络的工作流程来说明其通信的具体实现。 ZIGBEE协议栈较...部分代码: void osalAddTasks( void ) { osalTaskAdd (Hal_Init, Hal_...
更多相关标签:
zigbee osal | zigbee osal nv write | zigbee协议栈 | zigbee协议栈详解 | 开源zigbee3.0协议栈 | zigbee协议栈有哪些 | zigbee3.0协议栈 | zigbee协议栈结构图 |