ZigBee协议栈OSAL层API函数译.docx
- 文档编号:28617272
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:14
- 大小:18.60KB
ZigBee协议栈OSAL层API函数译.docx
《ZigBee协议栈OSAL层API函数译.docx》由会员分享,可在线阅读,更多相关《ZigBee协议栈OSAL层API函数译.docx(14页珍藏版)》请在冰豆网上搜索。
ZigBee协议栈OSAL层API函数译
3.信息管理API
3.1概述
这部分API提供了任务或处理单元与不同的处理环境之间的数据交换。
这部分API函数能够为任务分配和收回消息缓冲区,发送命令消息给以外一个任务并且接收应答。
3.2osal_msg_allocate()
概述:
当一个任务调用这个函数时,将为消息分配缓冲区,函数会将消息加入缓冲区,并调用osal_msg_send()将消息发送到另一个任务。
原型:
byte*osal_msg_allocate(uint16len)
参数:
len:
消息的长度
返回值:
指向消息缓冲区的指针,当分配失败时返回NULL
3.3osal_msg_deallocate()
概述:
用于收回缓冲区
原型:
byteosal_msg_deallocate(byte*msg_ptr)
参数:
Msg_ptr:
指向将要收回的缓冲区的指针
返回值:
RETURNVALUEDESCRIPTION
ZSUCCESS回收成功
INVALID_MSG_POINTER错误的指针
MSG_BUFFER_NOT_AVAIL缓冲区在队列中
3.4osal_msg_send()
概述:
任务调用这个函数以实现发送指令或数据给另一个任务或处理单元。
目标任务的标识必须是一个有效的系统任务,当调用osal_create_task()启动一个任务时,将会分配任务标识。
osal_msg_send()也将在目标任务的事件列表中设置SYS_EVENT_MSG
原型:
byteosal_msg_send(bytedestination_task,byte*msg_ptr)
destination_task:
目标任务的标识
msg_ptr:
指向消息缓冲区的指针
返回值:
ZSUCCESS消息发送成功
INVALID_MSG_POINTER无效指针
INVALID_TASK目标任务无效
3.5osal_msg_receive()
概述:
任务调用这个函数来接收消息。
消息处理完毕后,发送消息的任务必须调用
osal_msg_deallocate()收回缓冲区。
原型:
byte*osal_msg_receive(bytetask_id)
参数:
task_id:
消息发送者的任务标识
返回值:
指向消息所存放的缓冲区指针,如果没有收到消息将返回NULL。
4.任务同步API
4.1概述
这个API使能一个任务等待一个事件的发生和返回控制而不是一直等待。
在这个API中的函数可以用来为任务设置事件,立刻通知任务有事件被设置。
4.2osal_set_event()
概述:
函数用来设置一个任务的事件标志
原型:
byteosal_set_event(bytetask_id,UINT16event_flag)
参数:
task_id:
任务标识
event_flag:
2个字节,每个位特指一个事件。
只有一个系统事件,其他事件在接收
任务中定义。
ZSUCCESS成功设置
INVALID_TASK无效任务
5.定时器管理API
5.1概述
这个API允许内部任务(Z-Stack)以及应用层任务使用定时器。
函数提供了启动和停止定时器的功能,定时器最小增量为1MS。
5.2osal_start_timer()
概述:
启动定时器函数。
当定时器到点时,thegiveneventbitwillbeset。
事件将在任务中设置,要指明具体任务,调用osal_start_timerEx()
原型:
byteosal_start_timer(UINT16event_id,UINT16timeout_value);
参数:
event_id:
用户定义的eventbit.当定时器到点时,事件将通知任务。
timeout_value:
定时值(ms)
返回值:
ZSUCCESSTimer成功开启
NO_TIMER_AVAILABLE无法开启
5.3osal_start_timerEx()
概述:
功能与osal_start_timer()相近,这个函数允许调用者为另一个任务启动定时器
原型:
byteosal_start_timerEx(bytetaskID,UINT16event_id,UINT16timeout_value);
参数:
略
返回值:
ZSUCCESSTimer成功开启
NO_TIMER_AVAILABLE无法开启
5.4osal_stop_timer()
概述:
停止正在运行的定时器,停止外部事件调用osal_stop_timerEx()
原型:
byteosal_stop_timer(UINT16event_id);
参数:
event_id:
将要结束的目标事件(该事件是启动定时器的事件)
返回值:
ZSUCCESSTimer成功停止
INVALID_EVENT_ID无效事件
5.5osal_stop_timerEx()
概述:
结束外部事件的定时器
原型:
byteosal_stop_timerEx(bytetask_id,UINT16event_id);参数:
略
返回值
ZSUCCESSTimer成功停止
INVALID_EVENT_ID无效事件
5.6osal_GetSystemClock()
概述:
读取系统时间
原型:
uint32osal_GetSystemClock(void);
参数:
无
返回值:
系统时间(ms)
6.中断管理API
6.1概述:
这个API实现任务与外部中断的接口,函数允许任务关联每一个具体的中断程序,可以开关中断。
在中断服务程序内,其他任务可以设置事件。
6.2osal_int_enable()
概述:
函数用于使能中断。
原型:
byteosal_int_enable(byteinterrupt_id)
参数:
interrupt_id:
目标中断
返回值:
ZSUCCESSInterrupt成功使能
INVALID_INTERRUPT_ID无效中断
6.3osal_int_disable()
概述:
关闭中断
原型:
byteosal_int_disable(byteinterrupt_id)
参数:
略
返回值:
ZSUCCESSInterrupt成功关闭
INVALID_INTERRUPT_ID无效中断
7.任务管理API
7.1概述
这个API用于在OSAL中增加和管理任务。
每一个任务由任务初始化函数和时间处理函数组成。
OSALcallsosalinitTasks()[applicationsupplied]toinitializethetasksandOSALusesatasktable(constpTaskEventHandlerFntasksArr[])tocalltheeventprocessorforeachtask(alsoapplicationsupplied).
建立tasktable的例子:
constpTaskEventHandlerFntasksArr[]=
{
macEventLoop,//我的理解是已经建立好的事件队列
nwk_event_loop,
Hal_ProcessEvent,
MT_ProcessEvent,
APS_event_loop,
ZDApp_event_loop,
};
//任务数
constuint8tasksCnt=sizeof(tasksArr)/sizeof(tasksArr[0]);
建立任务的例子:
voidosalinitTasks(void)
{
uint8taskID=0;
tasksEvents=(uint16*)osal_mem_alloc(sizeof(uint16)*tasksCnt);
osal_memset(tasksEvents,0,(sizeof(uint16)*tasksCnt));
macTaskinit(taskID++);
nwk_init(taskID++);
Hal_Init(taskID++);
MT_TaskInit(taskID++);
APS_Init(taskID++);
ZDApp_Init(taskID++);
}
7.2osal_init_system()
概述:
该函数初始化OSAL系统。
必须用在任何一个使用OSAL的地方。
原型:
byteosal_init_system(void)
参数:
无
返回值:
ZSUCCESS成功
7.3osal_start_system()
概述:
这个函数是系统任务的主循环函数,在循环里面将遍历所有的任务事件,为触发事件的任务调用任务事件处理函数。
当事件处理完之后,将返回主循环。
如果没有事件,函数将把处理器转到睡眠模式。
原型:
voidosal_start_system(void)
参数:
无
返回值:
无
7.4osal_self()
概述:
不在支持,不推荐
7.5osalTaskAdd()
概述:
不在支持,不推荐可以参考7.1任务初始化。
8.内存管理API
8.1概述
简单的内存分配系统,支持动态分配内存。
8.2osal_mem_alloc()
概述:
如果成功的话,该函数将分配内存并返回指针。
原型:
void*osal_mem_alloc(uint16size);
参数:
size–想分配的内存空间的字节数
返回值:
返回一个void指针指向新分配的缓冲区。
如果没有足够的空间将返回NULL。
8.3osal_mem_free()
概述:
释放内存空间
原型:
voidosal_mem_free(void*ptr);
参数:
Ptr:
指向将要释放的空间,改空间必须是分配过的。
返回值:
无
9.电源管理API
9.1概述
这个部分阐述了OSAL的电源管理系统。
系统提为应用或者任务提供了通知OSAL的方式,包括何时可以安全关闭,接收设备和其他设备,以及何时将处理器处于睡眠模式。
有两类控制电源管理的函数。
第一个,osal_pwrmgr_device(),设置设备级别模式(节点或不节点)。
其次是osal_pwrmgr_task_state(PWRMGR_HOLD),每个任务可以通过调用它函数holdoffthepowermanager,如果一个任务“Holds”thepowermanager后就需要调用
osal_pwrmgr_task_state(PWRMGR_CONSERVE)允许电源管理来保存电源管理模式。
默认当任务建立时,每个任务的电源管理状态被设置成PWRMGR_CONSERVE。
如果任务不想实行断电保护(没有变化),不需要调用osal_pwrmgr_task_state().电源管理将在进入电源保护状态之前察看设备模式和所有任务共有的电源状态。
9.2osal_pwrmgr_device()
概述:
函数在上电或电源需求变更时调用(例如电源支持协调器)。
这一函数设置了大体的设备电源管理的开/关状态。
该函数应当从中央控制实体(如ZDO)被调用。
原型:
voidosal_pwrmgr_state(bytepwrmgr_device);
参数:
pwrmgr_device:
更改或设置节电模式
PWRMGR_ALWAYS_ON无节电
PWRMGR_BATTERY开节电
返回值:
无
9.3osal_pwrmgr_task_state()
概述:
任务调用这个函数决定是否让OSAL保存电源状态。
默认当任务创建时,它自己的电源状态设置成保存,如果任务总是想保存电源状态,就不需要调用这个函数。
原型:
byteosal_pwrmgr_task_state(bytetask_id,bytestate);
参数:
State–变更的电源状态
PWRMGR_CONSERVE打开节电,初始化默认
PWRMGR_HOLD关闭节电
返回值:
ZSUCCESS成功
INVALID_TASK无效任务ID
10.非易失性(NV)内存管理
10.1概述
这部分阐述了OSAL的非易失性内存管理系统。
系统为应用提供了一种永久储存信息的方式。
协议栈也使用它来保存一些协议必要的项目。
非易失性函数用来读写用户定义的项目包括任意的数据类型例如结构体和数组。
用户可以读写这个项目,或者项目里的单一元素通过设置适当的长度。
每部分NV有一个ID,有些被占用了,以下是分块表。
0x0000Reserved
0x0001–0x0020OSAL
0x0021–0x0040NWK
0x0041–0x0060APS
0x0061–0x0080Security
0x0081–0x00A0ZDO
0x00A1–0x0200Reserved
0x0201–0x0FFFApplication
0x1000-0xFFFFReserved
在使用API时有一些重要的注意点:
1.。
。
。
例如,最好的写NV的时间是关闭接收之后
2.尽量减少NV的写频率,耗费时间和电源,对于flash有擦写次数的限制。
3.如果一个或多个NV项目的结构发生变化,特别是当从一个升级版本的
z-stack到另一个,有必要擦除和重新初始化NV内存。
否则,在NV项目上的读和写操作的改变将失败或产生错误的结果。
10.2osal_nv_item_init()
概述:
初始化一个NV项目。
这个函数检查一个NV项目的存在与否。
如果不存在,它将被建立和初始化随着数据一起传给函数,这个函数必须在调用osal_nv_read()orosal_nv_write()之前被调用
原型:
byteosal_nv_item_init(uint16id,uint16len,void*buf);
参数:
Id:
用户定义的项目ID
Len:
项目的大小
Buf:
指向项目初始化的数据。
如果没有初始化的数据,设置为NULL
返回值:
ZSUCCESS成功
NV_ITEM_UNINIT成功但是项目之前不存在
NV_OPER_FAILED操作失败
10.3osal_nv_read()
概述:
从NV中读数据,可以读取整个项目,或是项目中有索引指定的元素,数据复制到*buf
原型:
byteosal_nv_read(uint16id,uint16offset,uint16len,void*buf);参数:
Id:
用户定义的项目ID
Offset:
Memoryoffsetintoiteminbytes.
Len:
项目长度
Buf:
数据保存缓冲区指针
返回值:
ZSUCCESSSuccess
NV_ITEM_UNinitItemisnotinitialized
NV_OPER_FAILEDOperationfailed
10.4osal_nv_write()
概述:
写数据到NV
原型:
byteosal_nv_write(uint16id,uint16offset,uint16len,void*buf);参数:
Id:
用户定义的ID
Offset:
Memoryoffsetintoiteminbytes.
Len:
项目长度
Buf:
写数据
返回值:
ZSUCCESS成功
NV_ITEM_UNINIT项目没有初始化
NV_OPER_FAILED操作失败
10.5osal_offsetof()
概述:
这个宏计算出一个单元内结构的内存偏移量。
他对NVAPI函数涌来计算偏移量参数很有用。
原型:
osal_offsetof(type,member)
参数:
Type:
结构类型
Member:
结构成员
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ZigBee 协议 OSAL API 函数