AliOS Things异步事件框架Yloop

摘要: Yloop概要 Yloop是AliOS Things的异步事件框架。Yloop借鉴了,libiuv及嵌入式业界常见的event loop,综合考虑使用复杂性,性能,及footprint,实现了一个适合于MCU的事件调度机制。

Yloop概要
Yloop是AliOS Things的异步事件框架。Yloop借鉴了,libuv及嵌入式业界常见的event loop,综合考虑使用复杂性,性能,及footprint,实现了一个适合于MCU的事件调度机制。

Yloop上下文
每个Yloop实例(aos_loop_t)与特定的任务上下文绑定,AliOS Things的程序入口application_start所在的上下文与系统的主Yloop实例绑定,该上下文也称为主任务。主任务以外的任务也可以创建自己的Yloop实例。

Yloop调度
Yloop实现了对IO,timer,callback,event的统一调度管理:

IO:最常见的是Socket,也可以是AliOS Things的vfs管理的设备
timer:即常见的定时器
callback:特定的执行函数
event:包括系统事件,用户自定义事件
当调用aos_loop_run后,当前任务将会等待上述的各类事件发生。

Yloop实现原理
Yloop利用协议栈的select接口实现了对IO及timer的调度。AliOS Things自带的协议栈又暴露一个特殊的eventfd接口,Yloop利用此接口把VFS的设备文件,和eventfd关联起来,实现了对整个系统的事件的统一调度。

Yloop的使用
从hello world开始
hello world example
里面有这样一段代码:

static void app_delayed_action(void *arg)
{LOG("%s:%d %s\r\n", __func__, __LINE__, aos_task_name());aos_post_delayed_action(5000, app_delayed_action, NULL);
}int application_start(int argc, char *argv[])
{aos_post_delayed_action(1000, app_delayed_action, NULL);aos_loop_run();return 0;
}

application_start里面做了两件事情:

调用aos_post_delayed_action创建了一个1秒的定时器(Yloop里面只有oneshot timer)
调用aos_loop_run进入事件循环
1秒后,定时器触发,app_delayed_action被调用,而app_delayed_action里面

调用LOG打印
再次创建一个5秒的定时器,重而实现定期执行app_delayed_action
这里注意到,程序并不需要aos_loop_init()去创建Yloop实例,因为系统会默认自动创建主Yloop实例。

和Socket的结合
以mqtt的framework/connectivity/mqtt/mqtt_client.c作为例子:

static int iotx_mc_connect(iotx_mc_client_t *pClient)
{<snip>rc = MQTTConnect(pClient);<snip>aos_poll_read_fd(get_ssl_fd(), cb_recv, pClient);<snip>
}

在和服务端建立好socket连接后,调用aos_poll_read_fd()把mqtt的socket加入到Yloop的监听对象里。当服务端有数据过来时,cb_recv回调将被调用,进行数据的处理。这样,mqtt就不需要一个单独的任务来处理socket,从而节省内存使用。同时,由于所有处理都是在主任务进行,不需要复杂的互斥操作。

系统事件的处理
AliOS Things定义了一系列系统事件,程序可以通过aos_register_event_filter()注册事件监听函数,进行相应的处理,比如WiFi事件。

static void netmgr_events_executor(input_event_t *eventinfo, void *priv_data)
{switch ((eventinfo->code) {case CODE_WIFI_ON_CONNECTED:<do somthing><snip>}
}aos_register_event_filter(EV_WIFI, event_cb, NULL);

define EV_USER 0x1000

EV_USER以后的事件ID可以用于用户自定义的事件。

Yloop回调
Yloop回调用于跨任务的处理。以下面伪代码为例:

void do_uart_io_in_main_task(void *arg)
{<do something>
}void io_recv_data_cb(char c)
{aos_schedule_call(do_uart_io_in_main_task, (void *)(long)c);
}

假设uart_recv_data_cb是IO设备收到数据时的回调,收到数据后通过aos_schedule_call把实际处理do_uart_io_in_main_task放到主任务上下文去执行。这样,数据的逻辑处理do_uart_io_in_main_task就不需要考虑并发,而去做复杂的互斥操作。

注意事项
Yloop的API(include/aos/yloop.h)除了下述API,都必须在Yloop实例所绑定的任务的上下文执行:

aos_schedule_call
aos_loop_schedule_call
aos_loop_schedule_work
aos_cancel_work
aos_post_event
小结
Yloop作为AliOS Things的事件框架,和VFS,协议栈深度结合,在取得较好的footprint的同时,能较好地适应于对footprint要求较高只有一个主任务的系统,也可以适用于对处理的并发性要求较高的系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这项技术,风头正劲,BAT要力捧!程序员:我彻底慌了...

人工智能离我们还遥远吗&#xff1f;近日&#xff0c;海底捞斥资1.5亿打造了中国首家火锅无人餐厅&#xff1b;阿里酝酿了两年之久的全球首家无人酒店也正式开始运营&#xff0c;百度无人车彻底量产。李彦宏称&#xff0c;这是中国第一款能够量产的无人驾驶乘用车。而阿里的这家…

joi模块验证日期格式_python datetime模块详解

一、datetime模块介绍通过print(dir(datetime))&#xff0c;我们可以看到模块内属性和类&#xff1a;[MAXYEAR, MINYEAR, __builtins__, __cached__, __doc__, __file__, __loader__, __name__, __package__, __spec__, date, datetime, datetime_CAPI, sys, time, timedelta, …

AliOS Things 基于组件化思想的多bin特性

摘要&#xff1a; 今年杭州云栖大会上&#xff0c;AliOS Things正式发布&#xff0c;其中有一个基于组件化思想的多bin特性&#xff0c;这是AliOS Things有专利保护的多bin fota升级解决方案的核心 今年杭州云栖大会上&#xff0c;AliOS Things正式发布&#xff0c;其中有一个基…

case计算机英语,计算机英语常用术语

小编为大家整理了。一起来学习吧!KB:等于1024 ByteMB:等于1024 KBGB&#xff1a;等于1024 MBByte:字节&#xff0c;等于8 bit***8个位的组合&#xff0c;共有256种电路状态***&#xff0c;计算机一个文字以8 bit来表示bit:位&#xff0c;计算机数据最基本的单位&#xff0c;有0…

查看linux是否为虚拟机,以及其它信息,cpu,主机型号,主板型号等

查看属于什么类型主机&#xff1f; dmidecode -s system-product-name物理机&#xff1a; [rootswnode1]# dmidecode -s system-product-name I840-GS虚拟机&#xff1a; [rootgnntdb DbBackup]# dmidecode -s system-product-name VMware Virtual Platform# 总核数 物理CP…

数据库风云:老骥伏枥,新秀辈出

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;姜洪军“在数据库技术方面&#xff0c;亚马逊落后甲骨文10至20年”。2018年10月23日&#xff0c;甲骨文&#xff08;Oracle&#xff09;创始人、执行董事长拉里埃里森&#xff0c;在甲骨文举办的一次大会的主题演讲…

解读阿里云oss-android/ios-sdk 断点续传(多线程)

摘要&#xff1a; oss sdk 断点续传功能使用及其相关原理 前言 移动端现状 随着移动端设备的硬件水平的不断提高&#xff0c;如今的cpu&#xff0c;内存等方面都大大的超过了一般的pc电脑&#xff0c;因此在现今的程序中&#xff0c;合理的使用多线程去完成一些事情是非常有必…

云钻还在吗 苏宁怎么解除实名认证_快手7天怎么养号,5步简易养号方案送上

今天我们聊一聊&#xff0c;新注册的快手号&#xff0c;7天怎么养号&#xff1f;为什么要养号&#xff1f;什么情况下需要养号&#xff1f;一般来说&#xff0c;新账号、播放量不高、很少热门、违规等情况&#xff0c;都需要养号。养号有什么作用&#xff1f;养号的作用很多&am…

将html表格导出到excel表格,table2excel-将HTML表格内容导出到Excel中_html/css_WEB-ITnose...

简要教程jquery-table2excel是一款可以将HTML表格的内容导出到微软Excel电子表格中的jQuery插件。该插件可以根据你的需要导出表格中的内容&#xff0c;不需要的行可以不导出。它文件体积小&#xff0c;使用非常方便。注意导出的Excel文件的格式&#xff0c;默认导出为.xlsx格式…

RDS读写分离,海量数据一键搞定

简介 RDS为用户提供高透明&#xff0c;高可用&#xff0c;高性能&#xff0c;高灵活的读写分离服务。在最近的版本我们基于短连接的用户进行了优化&#xff0c;使得短连接的用户负载均衡更加完善合理。RDS读写分离有如下特性&#xff1a; 易用/透明性 用户只需要在原来的只读…

7 行代码优雅地实现 Excel 文件导出功能?

文章目录一、前言二、Apache poi、jxl 的缺陷三、阿里出品的 EasyExcel&#xff0c;安利一波四、EasyExcel 解决了什么五、快速上手5.1 添加依赖5.2 七行代码搞定 Excel 生成六、特殊场景支持七、Web 下载示例代码八、需要注意的点九、总结一、前言 关于导出 Excel 文件&#…

Docker精华问答 | 用dockerfile制作镜像

Docker 是个划时代的开源项目&#xff0c;它彻底释放了计算虚拟化的威力&#xff0c;极大提高了应用的维护效率&#xff0c;降低了云计算应用开发的成本&#xff01;使用 Docker&#xff0c;可以让应用的部署、测试和分发都变得前所未有的高效和轻松&#xff01;1Q&#xff1a;…

日志服务Flink Connector《支持Exactly Once》

摘要&#xff1a; Flink log connector是阿里云日志服务推出的&#xff0c;用于对接Flink的工具&#xff0c;包含两块&#xff0c;分别是消费者和生产者&#xff0c;消费者用于从日志服务中读数据&#xff0c;支持exactly once语义&#xff0c;生产者用于将数据写到日志服务中&…

两个瓶子水怎样一样多_同事每天比我多睡两个小时!省下70万买了地铁站附近房子 杭州姑娘却感叹买房时一定是脑子进了水……...

都市快报讯 你上下班路上要多久&#xff1f;这个问题最近引起网友热议。 昨天&#xff0c;杭州市城乡建设发展研究院发布11月份城区交通运行分析&#xff1a;从上个月起&#xff0c;杭州的交通运行已经开启“冬季模式”&#xff0c;晚高峰出行进一步集中&#xff0c;拥堵程度环…

为什么电路交换不适合计算机网络,电路交换技术不适合计算机数据通信

5.2 分组交换原理上一节介绍了计算机网络的组成和网络的体系结构&#xff0c;其中通信子网的基本任务就是将数据信息从源点传送到S的点&#xff0c;在源点与目的点之间可能要经过许多个链路和中继节点。链路的功能是传输&#xff0c;而中继节点的功能是交换&#xff0c;也就是从…

'parent.relativePath' points at no local POM

unable to find valid certification path to requested target and ‘parent.relativePath’ points at no local POM 解决方案&#xff1a; 把这个 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent<…

Kibana:数据分析的可视化利器

摘要&#xff1a; 阿里云Elastisearch集成了可视化工具Kibana&#xff0c;用户可以使用Kibana的开发工具便捷的查询和分析存储在Elastisearch中的数据。除了柱状图、线状图、饼图、环形图等经典可视化功能外&#xff0c;还拥有地理位置分析、数据图谱分析、时序数据分析等高级功…

Kubernetes监控在小米的落地

戳蓝字“CSDN云计算”关注我们哦&#xff01;转自&#xff1a;小米云技术作者&#xff1a;郭如意本文介绍了高可用、持久存储、可动态调整的Kubernetes监控方案的实现过程。小米的弹性调度平台&#xff08;Ocean&#xff09;以及容器平台主要基于开源容器自动化管理平台kuberne…

智能机器人建房子后房价走势_深圳建二手房价引导制度,学习长沙意图明显,距离稳准狠差点意思...

#深圳建二手房价引导制度#大家好&#xff0c;我是勇谈。9月17日&#xff0c;深圳市司法局就《深圳市房地产市场监管办法(修订征求意见稿)》公开征求意见。《征求意见稿》共九章108条。对于修订监管办法的必要性&#xff0c;深圳市司法局也给出了自己的答案“《办法》的相关规定…

【云上ELK系列】Logstash迁移Elasticsearch数据方法解读

摘要&#xff1a; 用Logstash实现Elasticsearch集群快速迁移&#xff0c;解读Logstash中metadata的功效&#xff0c;避免踩坑 Elasticsearch中数据搬迁是工程师们经常会做的&#xff0c;有时是为了集群迁移、有时是为了数据备份、有时是为了升级等等&#xff0c;迁移的方式也有…