首页 > 学院 > 开发设计 > 正文

ZigBee ZStack OSAL层API功能函数汇总

2019-11-06 09:02:28
字体:
来源:转载
供稿:网友

为了更进一步了解ZStack协议栈,我们需要了解OSAL层每个API的作用,API主要分为以下几类:

1.任务注册、初始化和启动

2.任务间消息的传递

3.任务的同步

4.中断处理

5.定时器

6.内存分配

一、消息管理API(用于分配和回收消息缓存区,发送命令给其他任务,接受其他任务的应答消息)

a. uint8 *osal_msg_allocate( uint16 len ) DIRECTIONS:用于填充消息缓冲区INPUT:消息的长度OUTPUT:指向新创建的消息缓冲区的指针

b. uint8 osal_msg_deallocate( uint8 *msg_ptr )DIRECTIONS:用于释放消息缓冲区INPUT:指向需要删除的消息缓冲区的指针OUTPUT:操作结果(成功、无效指针、消息正在队列中无法删除)

c. uint8 osal_msg_send(uint8 destination_task, uint8 *msg_ptr ) DIRECTIONS:用于任务发送命令或者数据消息给其他任务INPUT:要发送消息给其他任务的ID,要发送消息缓冲区的指针OUTPUT:操作结果(发送成功、无效的消息指针、发送的任务ID无效)

d. uint8 *osal_msg_receive(uint8 task_id ) DIRECTIONS:用于任务接受一个消息INPUT:要接受消息的任务的IDOUTPUT:指针指向接受到的消息或者没收到返回NULL

e. osal_event_hdr_t *osal_msg_find(uint8 task_id, uint8 event) DIRECTIONS:通过任务ID和事件ID去索引消息INPUT:索引的任务和事件IDOUTPUT:索引到的结果(成功:返回指向消息的指针,失败:NULL)

二、任务同步API(用于设置任务的事件并通知任务有事件发生)

a. uint8 osal_set_event(uint8 task_id, uint16 event_flag ) DIRECTIONS:用于设置任务的事件标记位INPUT:任务ID和任务的事件标志位OUTPUT:操作结果(成功或者无效的任务)

三、定时器管理API(被stack内部和应用程序调用,打开或者关闭定时器,时间单位为ms)

a. uint8 osal_start_timerEx( uint8 taskID, uint16 event_id,uint32 timeout_value );DIRECTIONS:打开定时器,期满后将某一任务的某一事件标志位置位,一次性的不会重新装载INPUT:定时器期满后需要调用的任务ID和事件ID,定时时间(ms)OUTPUT:操作结果(成功或者不能启动定时器)

b. uint8 osal_start_reload_timer( uint8 taskID, uint16 event_id,uint32 timeout_value );DIRECTIONS:打开定时器,期满后将某一任务的某一事件标志位置位,并重新装载定时时间INPUT:定时器期满后需要调用的任务ID和事件ID,重新装载的定时时间(ms)OUTPUT:操作结果(成功或者不能启动定时器)

c. uint8 osal_stop_timerEx( uint8 task_id, uint16 event_id );DIRECTIONS:关闭之前已打开的定时器INPUT:需要取消的任务ID和事件IDOUTPUT:操作结果(成功或者无效事件)

d. uint32 osal_GetSystemClock( void );DIRECTIONS:读取系统时钟INPUT:无OUTPUT:系统时钟(ms)

四、中断管理API(使能或者关闭中断)

a. uint8 osal_int_enable( uint8 interrupt_id )DIRECTIONS:使能中断,当发生中断会调用服务程序INPUT:中断IDOUTPUT:操作结果(成功或者中断无效)b. uint8 osal_int_disable( uint8 interrupt_id )DIRECTIONS:关闭中断,当发生中断不会调用中断服务程序INPUT:中断IDOUTPUT:操作结果(成功或者中断无效)

五、任务管理API(用于在OSAL上添加和管理任务,每个任务由任务初始化和事件处理函数组成)

a. uint8 osal_init_system( void )DIRECTIONS:OSAL初始化,应该在最开始被调用INPUT:无OUTPUT:成功

b. void osal_start_system( void ) DIRECTIONS:用一个死循环,重复调用osal_run_system() INPUT:无OUTPUT:无

c. void osal_run_system( void )DIRECTIONS:轮询系统,如果有事件等待处理会调用对应的任务事件处理函数,处理完了,其他事件等下一次轮询,如果没有事件等待处理就进入睡眠INPUT:无OUTPUT:无

d. uint8 osal_self( void )DIRECTIONS:当前运行中的任务的IDINPUT:无OUTPUT:当前运行中的任务ID(0x00-0xFE)或者无任务(0xFF)

六、内存管理API(动态内存分配)

a. void *osal_mem_alloc( uint16 size ); DIRECTIONS:动态分配内存INPUT:申请分配的动态内存大小(字节)OUTPUT:无符号指针指向分配的内存地址

b. void osal_mem_free( void *ptr ); DIRECTIONS:动态分配内存INPUT:之前申请分配的动态内存的指针OUTPUT:无

七、电源管理API

a. void osal_pwrmgr_device( uint8 pwrmgr_device );DIRECTIONS:电源模式切换INPUT:电源模式(PWRMGR_ALWAYS_ON或者PWRMGR_BATTERY)OUTPUT:无

b. uint8 osal_pwrmgr_task_state(uint8 task_id, uint8 state );DIRECTIONS:设置任务的电源状态,HOLD表示不进入睡眠INPUT:任务ID和电源状态(PWRMGR_CONSERVE或者PWRMGR_HOLD)OUTPUT:操作成功或者任务ID无效

八、NV存储API(读写掉电存储的变量,APP 的NV ID范围:0x0401 – 0x0FFF)

a. uint8 osal_nv_item_init( uint16 id, uint16 len, void *buf );DIRECTIONS:初始化NV存储的变量INPUT:NV ID,NV长度(字节)和初始值OUTPUT:操作成功、不存在或者失败

b. uint8 osal_nv_read( uint16 id, uint16 offset, uint16 len, void *buf ); DIRECTIONS:读取NV存储的变量INPUT:NV ID,偏移地址(一般为0字节),NV长度(字节)和读到结果的指针OUTPUT:操作成功或者失败

c. uint8 osal_nv_write( uint16 id, uint16 offset, uint16 len, void *buf );DIRECTIONS:写NV存储的变量INPUT:NV ID,偏移地址(一般为0字节),NV长度(字节)和要写数据的指针OUTPUT:操作成功或者失败、未初始化

d. uint8 osal_nv_delete( uint16 id, uint16 len );DIRECTIONS:删除一个NV存储的变量INPUT:NV ID,NV长度(字节)OUTPUT:操作成功或者失败、未初始化,长度错误e. uint16 osal_nv_item_len( uint16 id ); DIRECTIONS:返回一个NV存储变量的长度INPUT:NV IDOUTPUT:0-没找到NV,其他值代表长度九、其他APIa. uint16 osal_rand( void ); DIRECTIONS:返回一个随机数INPUT:无OUTPUT:16位无符号整数b. uint8 osal_memcmp( const void GENERIC *src1, const void GENERIC *src2,unsigned int len );DIRECTIONS:比较两个指针src1和src2指向的变量是否一样INPUT:第一个变量的指针,第二个变量的指针,变量长度OUTPUT:TRUE-相同,FALSE-不同

c. void *osal_memset( void *dest, uint8 value, int len ); DIRECTIONS:将某一范围的缓存区设为特定的值INPUT:缓存区地址,设定的值和长度(字节)OUTPUT:指向指针移动后的位置

d. void *osal_memcpy( void *dst, const void GENERIC *src, unsigned int len); DIRECTIONS:将某一块缓存区的值复制到另一块缓存区INPUT:要复制到的地址,复制源数据的地址,长度(字节)OUTPUT:指向指针移动后的位置


上一篇:曼哈顿距离

下一篇:Kruskal算法详细分析

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表