Zigbee协议栈OSAL层API函数
(2012-12-10 19:24:49)
标签:
zigbeezigbee2006osalapi协议栈 |
分类: Zigbee |
Zigbee协议栈内嵌了OSAL操作系统,OSAL操作系统提供了很多的API来对整个的协议栈进行管理。主要有下面的几类:
信息管理
任务同步
时间管理
中断管理
任务管理
内存管理
电源管理
非易失存储管理
1. 信息管理API
这部分API提供了任务或处理单元与不同的处理环境之间的数据交换。这部分API函数能够为任务分配和收回消息缓冲区,发送命令消息给另外一个任务并且接收应答。包括允许任务分配或不分配信息缓存、发送命令信息到其他任务、接受应答信息等API函数。
(1)osal_msg_allocate (
)
功能描述:
为信息分配缓存空间、任务调用或函数被调用的时候,该空间被信息填充或调用发送信息函数osal_msg_send()发送缓存空间的信息到其他任务。
原型:
byte
*osal_msg_allocate( uint16 len )
参数:
返回值:
注意:不能与函数osal_mem_alloc()混淆,osal_mem_alloc()函数被用于为在任务间发送信息分配缓冲区,用该函数也可以分配一个存储区。
(2)osal_msg_deallocate(
)
功能描述:
原型:
byte
osal_msg_deallocate( byte *msg_ptr )
参数:
返回值:
ZSUCCESS 回收成功
INVALID_MSG_POINTER 错误的指针
MSG_BUFFER_NOT_AVAIL 缓冲区在队列中
(3) osal_msg_send(
)
功能描述:
任务调用这个函数以实现发送指令或数据给另一个任务或处理单元。目标任务的标识必须是一个有效的系统任务,当调用osal_create_task
( )启动一个任务时,将会分配任务标识。
osal_msg_send()也将在目标任务的事件列表中设置SYS_EVENT_MSG
原型:
参数:
返回值:
ZSUCCESS 消息发送成功
INVALID_MSG_POINTER
无效指针
INVALID_TASK
目标任务无效
(4) osal_msg_receive(
)
功能描述:
任务调用这个函数来接收消息。消息处理完毕后,发送消息的任务必须调用osal_msg_deallocate()收回缓冲区。一个任务接收一个命令信息是,调用该函数
原型:
参数:
返回值:
osal_set_event( )
功能描述:
原型:
参数:
task_id :任务标识
event_flag:是2个字节的位图,每个位特指一个事件。只有一个系统事件(SYS_EVENT_MSG),其他事件在接收任务中定义。
返回值:
ZSUCCESS 成功设置
INVALID_TASK 无效任务
(1) osal_start_timer(
)
功能描述:
启动一个定时器,当定时器终止时,指定的事件标志位被设置。通过在任务中调用osal_start_timer函数设置时间标志位。如果指明任务ID,则可以用osal_start_timerEx()函数替代osal_start_timer().
原型:
参数:
返回值:
(2) osal_start_timerEx(
)
功能描述:
功能与osal_start_timer()相近,只不过参数多了一个任务ID,这个函数允许调用者为另一个任务启动定时器
原型:
byte osal_start_timerEx( byte taskID, UINT16
event_id, UINT16 timeout_value);
参数:
参数1:taskID
当定时器终止时,得到该事件的任务ID
参数2:event_id,是用户定义的事件位,当定时器终止时,正在调用的任务将被通报
参数3:定时器事件被设置之前时间的计数
返回值:
功能描述:
原型:
参数:
返回值:
功能描述:
原型:
参数:
返回值
(5)osal_GetSystemClock(
)
功能描述:
原型:
参数:
返回值:
4.
中断管理API
(1) osal_int_enable(
)
功能描述:
原型:
参数:
返回值:
功能描述:
原型:
参数:
被禁止中断的标识符
返回值:
ZSUCCESS
Interrupt 成功关闭
(1)osal_init_system()
功能描述:
原型:
参数:
返回值:
功能描述:
原型:
参数:
返回值:
(3)osal_self(
)
功能描述:
函数原型
byte osal_self(
void )
参数描述
无
返回值:
(4)osalTaskAdd(
)
功能描述:
理函数在事件时发生,而后处理其中之一,并返回其余到主循环中。
函数原型
//任务初始化函数原型
typedef
void(*pTaskInitFn) (unsigned char task_id);
//事件句柄函数原型
typedef unsigned
short (*pTaskEventHandlerFn)(unsigned char task_id,unsigned short
event);
void
osalTaskAdd(const pTaskInitFn pfnInit,const
pTaskEventHandlerFn,pfnEventProcessor,
参数描述
pfnInit –
指向任务初始化函数的指针
pfnEventProcessor
–
指向任务事件处理器函数的指针
taskPriority – 任务的优先级。值为
0 ~ 255
之间
优先级
值
OSAL_TASK_PRIORITY_LOW
50
OSAL_TASK_PRIORITY_MED
130
OSAL_TASK_PRIORITY_HIGH
230
注意:不再支持,不推荐,好像无线龙06协议栈有些例子都是基于这个函数添加任务的,后来06协议栈升级版本才是用的osal_init_system()——osalInitTaskS()——SampleAppInit()进行任务的初始化,然后用osal_start_system()函数包含一个无限循环查询所有的任务事件,如果有事件发生将调用相应的事件处理函数的方式。
6 内存管理API
(1)osal_mem_alloc(
)
功能描述:
函数原型
参数描述
返回值
(3)
osal_mem_free
功能描述:
函数原型
参数描述
返回值
7. 电源管理 API
这里的函数描述了OSAL的电源管理系统,当OSAL安全的关闭接收器宇外部硬件并使处理器进入休眠模式时,该系统提供想应用/任务通报该事件的方法
(1)osal_pwrmgr_task_state( )
功能描述:
函数原型
参数描述
类型 描述
返回值
返回值 描述
(2)
osal_pwrmgr_device()
功能描述:
原型:
参数:
返回值:
8.非易失性(NV)存储管理
他也可以用于某些堆栈条目的固定存储,这些 NV函数被设计用来读取/写入用户定义的由任何数据类型组成的(如结构与数组)项目。用户可以通过设定一适当的偏移量与长度读取或写入一个完整的项目或项目中的一个单元。
该API为NV存储介质独有,与存储体本身没有关系。可以被flash或eeprom使用。
每个 NV 项目都有一个惟一的标识符,每个应用都有特定的
ID值范围(其余 ID值为保留,或为栈、平台所用)。如果你的应用创建了自己的 NV项目,则必须从应用值范围内选一个
ID。如下
0x0000
Reserved
0x0001 – 0x0020
OSAL
0x0021 – 0x0040
NWK
0x0041 – 0x0060
APS
0x0061 – 0x0080
Security
0x0081 – 0x00A0
ZDO
0x00A1 – 0x0200
Reserved
0x0201 – 0x0FFF
Application
0x1000 -0xFFFF
Reserved
在使用API时有一些重要的注意点:
1)这些是模块化函数调用,一个操作需要花费几毫秒来完成,特别是
NV写操作。另外,中断需求禁止几毫秒。最好是在与其他时间性操作上没有冲突的时刻来执行这些函数。例如,一个较佳的写
NV 项目时刻是接收器关闭的时候。
2) 不要经常性写
NV,它需要花费时间与能源,并且大多数的闪存都有一个最大擦除次数限制。
3) 如果一个或多个
NV 项目变更,特别是
Z-stack的版本升级,它必须擦除且重新初始化
NV内存。否则,读与写已变更的 NV项目操作将失败或产生错误的结果。
(1)
osal_nv_item_init( )
功能描述:
初始化 NV中的一条项目。这个函数检测 NV项目的存在,如果不存在,则它用
数据创建与初始化一个 NV 项目,如果有的话。 在调用 osal_nv_read( )或osal_nv_write(
)前,每一个项目必须先调用该函数。
函数原型
yte
osal_nv_item_init(uint16 id,uint16 len,void *buf);
参数描述
id – 用户定义项目标识符
len –
项目长度(字节)
buf – 项目初始化数据指针,如果没有初始化数据,则设为
NULL.
返回值
返回值显示操作的结果。
返回值 描述
ZSUCCESS 成功
NV_ITEM_UNINIT
成功但项目不存在
(2)
osal_nv_read( )
功能描述:
函数原型
参数描述
返回值
返回值 描述
(2) nv_osal_write( )
功能描述:
函数原型
参数描述
返回值
返回值 描述
(3) osal_offsetof( )
功能描述:
函数原型
参数描述