0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全面解析腾讯最新开源 loT 操作系统 TencentOS tiny

丫丫119 来源:未知 作者:肖冰 2019-09-28 06:12 次阅读

近期腾讯低调地在GitHub上开源了自己的loT操作TencentOS tiny,截至发稿,已经累积了2000多个Star,引发了不小的关注。由于笔者曾经做过CSDN的嵌入式大版当过很长时间的版主,所以第一时间到https://github.com/Tencent/TencentOS-tiny下载了全部的代码,第一时间为大家带来解读。

TencentOS tiny整体架构

TencentOS tiny 提供精简的 RTOS内核,其架构图如下:

目前看其内核部分已经开发完成,并已经完全开源。从目前TencentOS tiny的情况看,腾讯入局物联网的相关链条已经规划完整:

布署了TencentOS tiny的的嵌入式开发板也已经制造出来,所以看来鹅厂在物联网时代对于入口的争夺也不会有丝毫的放松。

下面我将对于TencentOS tiny代码中内核及loT协议部分进行相关解读。

TencentOS tiny内核信号量与互斥锁解读

TencentOS tiny的官宣文档中对于其内核的描述如下:TencentOS tiny 实时内核包括任务管理、实时调度、时间管理、中断管理、内存管理、异常处理、软件定时器、链表、消息队列、信号量、互斥锁、事件标志等模块。其中定时器、消息队列等在之前都有过相应介绍,这里就为大家来解读一下信号量与互斥锁的相关代码。信号量与互斥锁的异同:1.信号量与互斥锁最根本的不同点在于:互斥锁的取值只能是0或者1,而信号量的取值范围则可以定义。2.信号量的作用域可以进程也可以是线程,而互斥锁只能是线程。简单来说互斥锁可以实现线程对于唯一资源的使用保护,而信号量则可以实现多线程或者进程间数量有限资源的使用保护。从某种意义上讲互斥锁是只能一个资源可用的信号量。关于TencentOS tiny互斥体的实现,首先来看其数据结构具体解读如下:

__API__k_err_ttos_mutex_pend_timed(k_mutex_t*mutex,k_tick_ttimeout) { TOS_CPU_CPSR_ALLOC(); k_err_terr; TOS_PTR_SANITY_CHECK(mutex); TOS_IN_IRQ_CHECK(); #ifTOS_CFG_OBJECT_VERIFY_EN>0u if(!pend_object_verify(&mutex->pend_obj,PEND_TYPE_MUTEX)){ returnK_ERR_OBJ_INVALID; } #endif TOS_CPU_INT_DISABLE();//将CPU锁住,防止其它进程进入 if(mutex->pend_nesting==(k_nesting_t)0u){//没有等待 mutex_fresh_owner_mark(mutex,k_curr_task);//将此mutex的owner置为当前task TOS_CPU_INT_ENABLE();//将CPU解锁 returnK_ERR_NONE;//返回成功 } if(knl_is_self(mutex->owner)){ if(mutex->pend_nesting==(k_nesting_t)-1){//等待数量如果超限则返回overflow TOS_CPU_INT_ENABLE(); returnK_ERR_MUTEX_NESTING_OVERFLOW; } ++mutex->pend_nesting; TOS_CPU_INT_ENABLE(); returnK_ERR_MUTEX_NESTING; } if(timeout==TOS_TIME_NOWAIT){//如果锁已经被占用超时时间为不等待,则直接返回 TOS_CPU_INT_ENABLE(); returnK_ERR_PEND_NOWAIT; } if(knl_is_sched_locked()){//如果任务被锁定,则直接返回 TOS_CPU_INT_ENABLE(); returnK_ERR_PEND_SCHED_LOCKED; } if(mutex->owner->prio>k_curr_task->prio){ tos_task_prio_change(mutex->owner,k_curr_task->prio);//如果owner的优先级更低,也就是其数值更大,则调整优先级 } pend_task_block(k_curr_task,&mutex->pend_obj,timeout);//阻塞pending的任务 TOS_CPU_INT_ENABLE();//解锁CPU总线 knl_sched();//解锁任务高度 err=pend_state2errno(k_curr_task->pend_state); if(err==K_ERR_NONE){//如果没有错误 TOS_CPU_INT_DISABLE(); mutex_new_owner_mark(mutex,k_curr_task);//刷新mutex当前的owner TOS_CPU_INT_ENABLE(); } returnerr; }

TencentOS tiny信号量的实现

首先来看k_sem_st的结构体:

__STATIC__k_err_tsem_do_post(k_sem_t*sem,opt_post_topt) { TOS_CPU_CPSR_ALLOC();//为CPU的CPSR进行预分配为后面恢复做准备 TOS_PTR_SANITY_CHECK(sem); #ifTOS_CFG_OBJECT_VERIFY_EN>0u if(!pend_object_verify(&sem->pend_obj,PEND_TYPE_SEM)){ returnK_ERR_OBJ_INVALID; } #endif TOS_CPU_INT_DISABLE();//CPU锁定防止其它进程入 if(sem->count==(k_sem_cnt_t)-1){//若资源数量为-1则返回超限 TOS_CPU_INT_ENABLE(); returnK_ERR_SEM_OVERFLOW; } if(pend_is_nopending(&sem->pend_obj)){//如果无pending的情况则直接返回 ++sem->count; TOS_CPU_INT_ENABLE(); returnK_ERR_NONE; } pend_wakeup(&sem->pend_obj,PEND_STATE_POST,opt);//唤醒pending的进程 TOS_CPU_INT_ENABLE();//恢复CPU knl_sched();//恢复任务调度 returnK_ERR_NONE; }

所以从上述解读相信各位读者也能看到,TencentOS tiny的内核的确是被精心修减过,针对物联网场景做了相应的优化,去掉了一些没有必要的功能代码。

TencentOS tiny对于MQTT的实现

在TencentOS tiny的官宣中对于IoT 协议栈介绍如下:TencentOS tiny 提供 lwip、AT Adapter、SAL 层,支持不同的网络硬件,例如以太网、串口 Wi-Fi、GPRSNB-IoT4G通信模块。TCP/IP 网络协议栈上提供常用的物联网协议栈,例如 CoAP、MQTT,支撑终端业务快速接入腾讯云。其中MQTT可以算是物联网时代比较通用的基于IP网络的协议了,它基于发布/订阅消息模式,提供一对多的消息分发有三种消息传递服务质量。1.最多一次,也就是消息发布者只会发布一次消息,不管对端是否收到也不会发布第二次。一般用于环境传感器的数据读取,因为一般环境传感器读取的密度很高,丢失几个数据并没有什么大问题。·2.确保到达,这个一般用在数据非常重要的情况,发送端将不断重复发送直到对端响应收到。但这样可能出现数据重复。3.确保恰好一次送达,确保消息正好到达一次。这个级别用于计费系统,重复或丢失的数据可能导致一定的损失。由于MQTT适合在低带宽、高延时网络运行的特性所以在特联网中的应用很多。不过呢腾讯针对此部分的实现则是完全拷贝于Eclipse Paho项目个人制作的原理动画如下图:

但是考虑到物联网终端其实仅需要MQTT的发布方即可,订阅方的代码其实没有太大必要保留,而且从目前发布支持的场景来看,MQTT一些通讯质量模式其实用处也不多,不过在这方面TencentOS tiny是没有做任何优化与裁减的。所以这应该也可以看做是TencentOS tiny的一个不足吧。

后记

随着移动互联网+智能硬件的不断发展,IoT的新业态大门徐徐开启,这里不但有众多互联网企业,也有传统家电甚至金融企业不断入局。但是与传统互联网软件+硬件的模式不同,物联网除了软、硬件外还多了一个侧面-场景,能将软、硬件及场景整合化一的公司才能笑到最后。就像HTML整合了互联网一样,MQTT等loT协议会是整合全链条的利器,所以最后笔者也呼吁各方除了重视操作系统内核外也需要大力参与loT通讯协议,尤其注重标准制订,这样才能跟上loT的时代潮流。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6829

    浏览量

    123338
  • 腾讯
    +关注

    关注

    7

    文章

    1655

    浏览量

    49446
  • LOT
    LOT
    +关注

    关注

    3

    文章

    15

    浏览量

    5958
收藏 人收藏

    评论

    相关推荐

    电力行业应用开源物联操作系统如何赋能新型工业化

      在2024开放原子开发者大会暨首届开源技术学术大会上,中国南方电网有限责任公司(简称“南方电网”)精彩呈现了电力物联网操作系统——“电鸿”的开源应用实例,全面展示了在
    的头像 发表于 12-24 11:50 231次阅读
    电力行业应用<b class='flag-5'>开源</b>物联<b class='flag-5'>操作系统</b>如何赋能新型工业化

    开源鸿蒙操作系统5.0 Release版本发布

    开源鸿蒙操作系统5.0 Release版本。 该版本在系统完备度、分布式创新、开发者体验以及系统稳定性等方面均实现了显著提升,标志着开源鸿蒙
    的头像 发表于 12-23 11:35 377次阅读

    deepin操作系统介绍

    希望从自己的能力和对桌面操作系统的理解,能给 Linux 的用户与开发者更多的选择。我们也相信 deepin 能够得到更多用户的认可与喜爱,成为开源世界的最佳选择。  一、 deepin 操作系统 先说 Linux
    的头像 发表于 12-23 09:08 306次阅读
    deepin<b class='flag-5'>操作系统</b>介绍

    【书籍评测活动NO.53】鸿蒙操作系统设计原理与架构

    的架构师来说,本书堪称“出卷老师亲自讲解的考试出题思路”。 本书重点介绍了鸿蒙操作系统的设计背景、设计理念和设计原则,同时对鸿蒙操作系统的整体架构、关键子系统的架构设计思路进行了详细的解析
    发表于 12-16 15:10

    Arm加入OpenCloudOS操作系统开源社区

    基于 Arm 架构的应用。近期,Arm 加入 OpenCloudOS 操作系统开源社区,共同推进开源操作系统的发展。 Arm 作为全球领先的计算平台公司,在史上应用最普及的 CPU
    的头像 发表于 11-15 11:34 359次阅读

    linux操作系统安装步骤 linux操作系统的特点及组成

    Linux操作系统安装步骤 Linux操作系统是一种开源操作系统,它以其稳定性、安全性和灵活性而闻名。以下是安装Linux操作系统的一般步
    的头像 发表于 10-21 11:24 561次阅读

    面向功能安全应用的汽车开源操作系统解决方案

    在SAE 2024国际汽车安全大会上,Elektrobit的Linux专家王红燕在操作系统与芯片技术的分论坛上为大家带来了“面向功能安全应用的汽车开源操作系统解决方案”主题演讲。
    的头像 发表于 09-27 09:21 480次阅读
    面向功能安全应用的汽车<b class='flag-5'>开源</b><b class='flag-5'>操作系统</b>解决方案

    嵌入式实时操作系统:Intewell操作系统与VxWorks操作系统有啥区别

    Intewell操作系统和VxWorks操作系统都是工业领域常用的操作系统,它们各有特点和优势。以下是它们之间的一些主要区别:
    的头像 发表于 07-08 14:16 442次阅读
    嵌入式实时<b class='flag-5'>操作系统</b>:Intewell<b class='flag-5'>操作系统</b>与VxWorks<b class='flag-5'>操作系统</b>有啥区别

    全球首个符合汽车功能安全标准的Ubuntu车载开源操作系统解决方案

    近期,德国汽车零部件巨头大陆集团旗下 Elektrobit 公司宣布,推出全球首款符合汽车功能安全标准的 Ubuntu 车载开源操作系统 EB corbos Linux for Safety Applications。
    的头像 发表于 04-29 16:48 719次阅读

    Elektrobit推出全球首个符合汽车功能安全标准的开源操作系统解决方案

    德国埃朗根,2024年4月23日 – Elektrobit今日宣布推出面向功能安全应用的EB corbos Linux for Safety Applications,这是全球首个符合汽车功能安全标准的开源操作系统 (OS) 解决方案。
    的头像 发表于 04-24 09:58 744次阅读
    Elektrobit推出全球首个符合汽车功能安全标准的<b class='flag-5'>开源</b><b class='flag-5'>操作系统</b>解决方案

    中软国际签署CLA,正式加入OpenCloudOS操作系统开源社区

    近日,中软国际签署 CLA(Contributor License Agreement 贡献者许可协议),正式加入 OpenCloudOS 操作系统开源社区。
    的头像 发表于 04-15 11:42 706次阅读

    RT-Thread斩获“最具影响力IoT操作系统奖”

    2024年3月30日,第十一届开源操作系统年度技术会议(OS2ATC)在西郊宾馆举办!RT-Thread作为国内领先的开源操作系统斩获了“最具影响力IoT
    的头像 发表于 04-10 09:51 601次阅读

    超云信创服务器与openEuler开源操作系统完成互认证

    日前,超云 C86 平台服务器 R3215、R3216 成功完成了与 openEuler 开源操作系统的兼容性适配工作。测试结果表明:openEuler 22.03 LTS SP3 版本的开源
    的头像 发表于 03-12 16:08 1308次阅读
    超云信创服务器与openEuler<b class='flag-5'>开源</b><b class='flag-5'>操作系统</b>完成互认证

    一个成熟且可靠的开源实时操作系统

    市场上有许多专有和开源实时操作系统(RTOS)。ThreadX已经以其对小代码大小和高性能的关注而闻名。然而,它的竞争优势远远超出了这些属性。
    的头像 发表于 02-20 12:26 878次阅读

    深度解析全球操作系统格局

    操作系统是负责协调、管理和控制计算机硬件与软件资源的程序,是整个计算机的核心系统软件。 按照操作系统面向的设备类型,通用操作系统主要包括桌面操作系统
    的头像 发表于 01-18 15:00 1191次阅读
    深度<b class='flag-5'>解析</b>全球<b class='flag-5'>操作系统</b>格局