BoneEngine OSAL API 说明 - Shaofa/AliOS-Things-Certification-Manual GitHub Wiki
下面列表为目前api的支持情况,'Y'代码支持,'N'代表不支持。
api | AliosThings | FreeRTOS |
---|---|---|
be_osal_init_yloop | Y | Y |
be_osal_start_yloop | Y | Y |
be_osal_schedule_call | Y | Y |
be_osal_post_delayed_action | Y | Y |
be_osal_post_event | Y | Y |
be_osal_register_event_filter | Y | Y |
be_osal_new_task | Y | Y |
be_osal_free_task | Y | Y |
be_osal_delay | Y | Y |
typedef struct {
uint32_t time;
uint16_t type;
uint16_t code;
size_t value;
size_t extra;
} be_osal_input_event_t;
typedef void (*be_osal_event_cb)(be_osal_input_event_t *event, void *data);
typedef void (*be_osal_call_cb)(void *data);
typedef void (*be_osal_task)(void * data);
函数名称:int32_t be_osal_init_yloop(void) |
---|
功能描述:初始化yloop事件调度系统 |
参数说明:void |
函数返回:0=success -1=fail |
注意事项:无 |
函数名称:void be_osal_start_yloop(void) |
---|
功能描述:启动yloop事件调度系统 |
参数说明:void |
函数返回:无 |
注意事项:无 |
函数名称:int32_t be_osal_schedule_call(be_osal_call_cb action, void *data)
|
功能描述:异步执行某回调函数
|
参数说明:
|
函数返回:0=success -1=fail
|
注意事项:无
|
函数名称:int32_t be_osal_post_delayed_action(int32_t ms, be_osal_call_cb action, void *data)
|
功能描述:延迟异步执行某回调函数
|
参数说明:
|
函数返回:0=success -1=fail
|
注意事项:无
|
函数名称:int32_t be_osal_post_event(uint16_t type, uint16_t code, size_t value)
|
功能描述:触发事件
|
参数说明:
|
函数返回:0=success -1=fail
|
注意事项:无
|
函数名称:int32_t be_osal_register_event_filter(uint16_t type, be_osal_event_cb cb, void *data)
|
功能描述:注册事件
|
参数说明:
|
函数返回:0=success -1=fail
|
注意事项:无
|
函数名称:int32_t be_osal_new_task(const char * name,be_osal_task task,void * data,int32_t size);
|
功能描述:创建新task
|
参数说明:
|
函数返回:0=success -1=fail
|
注意事项:无
|
函数名称:int32_t be_osal_free_task(void * handle);
|
功能描述:释放task
|
参数说明:
|
函数返回:0=success -1=fail
|
注意事项:无
|
函数名称:void be_osal_delay(uint32_t ms);
|
功能描述:毫秒级延时
|
参数说明:
|
函数返回:void
|
注意事项:无
|
AliosThings中实现了一套异步框架yloop(https://github.com/alibaba/AliOS-Things/wiki/Yloop-Event-Framework),能对IO、Timer、callback、event进行调度,所以针对AliosThings系统,只需要对原生API进行封装即可。
FreeRTOS中实现架构如下: 这里把callback、timer、event全部抽象成worker模型,利用最小堆来处理timer任务,当任务队列中没有可执行任务时,线程(或task)会进行阻塞。代码实现位于:链接
使用示范请参考仓库sample/os/vcall �