一、信息管理API
- osal_msg_allocate( )函数原型:任务是分配一个信息缓冲区,当任务调用或函数被调用时,该空间被信息填充或调用信息发送函数osal_msg_send() 发送缓冲空间的信息到其他任务,若该缓冲空间不能被分配,则设置msg_ptr=NULL空;
uint8 *osal_msg_allocate( uint16 len ),返回的是指针,若返回为空,则该信息缓存空间分配失败。
注:该函数不能与osal_mem_alloc()混淆,osal_mem_alloc()函数是用于为在任务间发送信息分配缓冲区。该函数可以分配一个存储空间。
2.osal_msg_deallocate( ) 信息处理分配缓存。该函数通过一个任务调用后完成处理一个接收的信息。
uint8 osal_msg_deallocate( uint8 *msg_ptr )
msg_ptr指向需要处理分配信息缓存的指针
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img2.ph.126.net/uq3itvDch87ONKp9NhFqvw==/1574008069783242722.jpg)
3. osal_msg_send( )一个任务发送一个命令或数据信息到其他任务或处理元素中。
uint8 osal_msg_send(uint8 destination_task, uint8 *msg_ptr )
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img8.ph.126.net/9kImPsIxVJTaxLpGASHlWw==/1076360310958797038.jpg)
4.osal_msg_receive( ) 任务接受一个命令信息调用该函数
uint8 *osal_msg_receive(uint8 task_id )
Return value is a pointer to a buffer containing the message or NULL if there is no received message.
5. osal_msg_find( )
osal_event_hdr_t *osal_msg_find(uint8 task_id, uint8 event)
This function searches for an existing OSAL message matching the task_id and event parameters
二、任务同步API:允许一个任务等待某个事件的发生并返回等待期间的控制
作用:set events for a task and notify the task once any event is set
1.osal_set_event( ) :set the event flags for a task
uint8 osal_set_event(uint8 task_id, uint16 event_flag ) 其中event_flag is a 2-byte bitmap ,每位对应一个事件
There is only one system event (SYS_EVENT_MSG), the rest of the events/bits are defined by the receiving task
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img4.ph.126.net/dyIGZfhdChP9UgZVlxdtNw==/1324902715394307044.jpg)
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img2.ph.126.net/K4CrkWd4sF3ka_fDgNyvaw==/662873570170852792.jpg)
设置 set an event bit and 自动重载计数
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img1.ph.126.net/bGZQQz97w4nwLGsQFSkjrQ==/1006835991711271261.jpg)
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img1.ph.126.net/P6kw6lLpYGLFsM5QAtmUDA==/1088463734957352681.jpg)
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img5.ph.126.net/Djf6310kAQdWAXF_EPPwjg==/2756484446944707395.jpg)
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img7.ph.126.net/jckwMOLuuABUTe3vp4iU2Q==/1153202979600811497.jpg)
const pTaskEventHandlerFn tasksArr[] =
{
macEventLoop,
nwk_event_loop,
Hal_ProcessEvent,
MT_ProcessEvent,
APS_event_loop,
ZDApp_event_loop,
};
const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] ); 计算数组元素个数
1.osal_init_system( )初始化osal系统:在启动任何一个OSAL之前必须被调用
uint8 osal_init_system( void )返回值为“SUCCESS”
2. osal_start_system( ) 任务系统的主循环函数
void osal_start_system( void )
3.osal_run_system( ) :void osal_run_system( void )
4.osal_self( )返回当前运行任务的ID号:uint8 osal_self( void )
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img2.ph.126.net/Z8hML_TogC8YTYk2ujIIPg==/2529897090692632342.jpg)
六、内存管理API:简单的存储分配系统。允许动态存储分配
1.osal_mem_alloc( ) 一简单存储分配函数,如果成功执行则返回指向一个缓存的指针
void *osal_mem_alloc( uint16 size );一个无类型指针指向被分配的新的缓存区
2. osal_mem_free( )释放被分配的存储空间以备再一次使用,只能释放被 osal_mem_alloc()分配的存储空间
void osal_mem_free( void *ptr );
七、电源管理API:当OSPL安全关闭接收器和外部硬件,并使处理器进入休眠模时,提供向应用/任务通报该事件的方法
osal_pwrmgr_device(), osal_pwrmgr_task_state( PWRMGR_HOLD )
1. osal_pwrmgr_init( ) :void osal_pwrmgr_init( void );不要调用此函数,因为已经在osal_init_system()中调用了
2. osal_pwrmgr_powerconserve( ) :void osal_pwrmgr_powerconserve( void );进入掉电模式
Do not call this function, it is already called in the OSAL main loop [osal_start_system()].
3.osal_pwrmgr_device( ) :void osal_pwrmgr_device( uint8 pwrmgr_device );
函数在电源供电状态或者电源需要改变时调用,可以设置设备电源管理的ON/OFF状态,这函数应该在一个中心控制区别调用比如ZDO.
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img4.ph.126.net/6hAXGQyb35jXdl-6Gc8Oxw==/1036390864265893124.jpg)
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img0.ph.126.net/Vbk7slysI7fzO5x0RUgGLA==/33214047269108210.jpg)
![OSAL API介绍 - qiang625 - 梦想成真的博客](http://img1.ph.126.net/ELoNj4fD9-uhPFmzwGaiyA==/2517230716740651911.jpg)
NV 函数被设计为可以读写用户定义的如结构或队列等任意的数据类型组成的条目,flash or EEPROM
![OSAL API介绍(下) - qiang625 - 梦想成真的博客](http://img5.ph.126.net/yfGsyEYXRlxyVTP7JK35ig==/1281837043957587705.jpg)
1.osal_nv_item_init( ):初始化一条目。该函数检查一存在的条目,若它不存在,则它被创建并用携带的数据进行初始化,在对每个条目调用 osal_nv_read() or osal_nv_write()之前,这个函数必须被调用
uint8 osal_nv_item_init( uint16 id, uint16 len, void *buf );条目初始化数据的指针
![OSAL API介绍(下) - qiang625 - 梦想成真的博客](http://img6.ph.126.net/Sz7j21QE-WJ4T10VfkiYug==/1004021241944158836.jpg)
![OSAL API介绍(下) - qiang625 - 梦想成真的博客](http://img4.ph.126.net/ZLooU8W2Gfo8cXlLpKbcFw==/1037798239149439224.jpg)
3.osal_nv_write( ):写数据到NV。uint8 osal_nv_write( uint16 id, uint16 offset, uint16 len, void *buf );
write an entire item to NV or an element of an item by indexing into the item with an offset
![OSAL API介绍(下) - qiang625 - 梦想成真的博客](http://img9.ph.126.net/2bQoH5drnVzxtPW6zUSb5A==/603482350084897259.jpg)
![OSAL API介绍(下) - qiang625 - 梦想成真的博客](http://img5.ph.126.net/AZlng-SoRot53dOMREcQcA==/2527363815902229665.jpg)
![OSAL API介绍(下) - qiang625 - 梦想成真的博客](http://img6.ph.126.net/ETZ4PYpFCUutDXpIUgAR7A==/586875326458970416.jpg)
OSAL Simple NV system implementation. 用户可以读写整个条目但不能读写条目中的某部分。
![OSAL API介绍(下) - qiang625 - 梦想成真的博客](http://img7.ph.126.net/YP32OK8RZF-EfstN6j59tw==/1149543804903570707.jpg)
![OSAL API介绍(下) - qiang625 - 梦想成真的博客](http://img8.ph.126.net/REkiryc1Bp35vBUYCxNDsA==/563231428415270988.jpg)
![OSAL API介绍(下) - qiang625 - 梦想成真的博客](http://img9.ph.126.net/6JaHm3PuWOQhtly5JwjEDw==/2552696563806193269.jpg)
typedef struct
{
uint8 seconds; // 0-59
uint8 minutes; // 0-59
uint8 hour; // 0-23
uint8 day; // 0-30
uint8 month; // 0-11
uint16 year; // 2000+
} UTCTimeStruct;
3.osal_getClock( ):调用这个函数来获取设备的当前时间。UTCTime osal_getClock( void );
4.osal_ConvertUTCTime( ) :将UTCTime转换成 UTCTimeStruct的函数
void osal_ConvertUTCTime( UTCTimeStruct * tm, UTCTime secTime );
5.osal_ConvertUTCSecs( ) :将UTCTimeStruct转换成UTCTime 的函数
UTCTime osal_ConvertUTCSecs( UTCTimeStruct * tm );
十一、OSAL Misc杂项:
This section describes miscellaneous OSAL functions that do not fit into the previous OSAL categories
描述不适合先前OSAL类别的多样化OSAL函数。
1.osal_rand( ) :返回一个16位的随机数uint16 osal_rand( void );
2. osal_memcmp( ) :比较内存部分。
uint8 osal_memcmp( const void GENERIC *src1, const void GENERIC *src2, unsigned int len );
返回值:TRUE - same, FALSE - different
3.osal_memset( ):void *osal_memset( void *dest, uint8 value, int len );
功能Sets a buffer to a specific value,返回值Pointer to where in the buffer this function stopped
4.osal_memcpy( ) :void *osal_memcpy( void *dst, const void GENERIC *src, unsigned int len );
功能Copies one buffer to another buffer,返回Pointer to end of destination buffer