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

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

3天内不再提示

超时逻辑在OpenHarmony中的实现

OpenAtom OpenHarmony 来源:OpenAtom OpenHarmony 作者:冷钦街 2022-07-06 09:52 次阅读

前言

在软件世界里面,超时是一个非常重要的概念。比如

● 当前线程暂时休眠1秒钟,休眠结束后继续执行

● 每5秒钟采集一下CPU利用率

● 数据发送失败,2秒钟以后再试一试

● 等待某种数据,但最多等待50毫秒

应用

//将当前任务休眠若干tick数,tick为时间单位,常见值为10毫秒

LITE_OS_SEC_TEXT UINT32 LOS_TaskDelay(UINT32 tick)

//获取信号量semHandle, 如果当前信号量不可用且timeout不为0,则最多等待timeout所指定的时间,在这段时间内如果信号量可用,则获取成功,否则获取失败。

LITE_OS_SEC_TEXT UINT32 LOS_SemPend(UINT32 semHandle, UINT32 timeout)

//从空的消息队列读取消息,或者向满的消息队列写消息时,如果timeout不为0,则最多等待timeout指定的时间,在这段时间内消息队列可读或可写,则进行对应的读写并返回成功,否则返回失败。

LITE_OS_SEC_TEXT UINT32 LOS_QueueRead(UINT32 queueID, VOID *bufferAddr, UINT32 bufferSize, UINT32 timeOut)

LITE_OS_SEC_TEXT UINT32 LOS_QueueWrite(UINT32 queueID, VOID *bufferAddr, UINT32 bufferSize, UINT32 timeOut)

//获取互斥锁,如果当前互斥锁被其它线程占用,则最多等待timeout指定的时间,此时间内其它线程释放了互斥锁并被本线程抢到则返回成功,否则返回失败。

LITE_OS_SEC_TEXT UINT32 LOS_MuxPend(UINT32 muxHandle, UINT32 timeout)

//等待其它线程向本线程发送事件,最多等待timout指定的时间

LITE_OS_SEC_TEXT UINT32 LOS_EventRead(PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeOut)

上述这些函数都是超时概念在OpenHarmonyliteos_m内核里的具体应用。

具体而言,liteos_m内核如何实现这个超时逻辑的呢,我们接着看下一个章节

原理

e249022e-fc63-11ec-ba43-dac502259ad0.png

如上图所示。在时间轴上,黄色圆点代表需要进行某种操作的时间点,而绿色圆点为检查系统是否有超时事件需要处理的检查时间点。系统周期性的进行检查(周期单位为tick)。在2个检查点之间可能有超时事件,也可能无超时事件。

例如,根据上图展示的情况。当前在第一个检查点,发现了2个超时事件,那么这次处理这2个超时事件;随着时间流逝,箭头来到第2个检查点,又发现2个超时事件,继续处理;在第3个检查点时,本段时间内无超时事件,所以是空操作。后续的检查以此类推。

代码实现


为了准确性以及时效性,本文选取了最新的版本的代码来描述。上述检查点和时间点由链表结构进行定义。具体在kernel/liteos_m/include/los_sortlink.h文件中。

e25d21be-fc63-11ec-ba43-dac502259ad0.png

由于原理图中的超时事件发生是非均匀的,且存在有序依次发生的逻辑,所以,这些信息被维护在双向链表中(对删除操作更友好)。

SortLinkList代表了链表中的每一个需要处理事件的时间点,responseTime代表具体的时间值(从启机开始的cpu cycle数目)。SortLinkAttribute代表链表的头部(哑头)。从名称也能看出,这个是一个排序的双向链表,排序的依据即responseTime这个数值。

需要注意的一个细节是:系统支持2个链表,其中一个是TASK链表,另一个是SWTMR链表。这2个链表实现方式一致,主要区别是,SWTMR链表超时处理是唤醒swtmr线程来处理超时事件,而task链表唤醒的是每个具体的task(sleep,ipc超时等场景)。使用swtmr线程来处理若干超时的机制,可以有效减少系统需要的线程数目,从而节省系统资源的占用。

总结

本文描述了超时逻辑在OpenHarmony中的实现,从原理,使用以及具体实现细节上进行了详尽讨论,并归纳整理了当前这种实现方式所带来的益处。

审核编辑:汤梓红

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

    关注

    30

    文章

    4788

    浏览量

    68607
  • 超时
    +关注

    关注

    0

    文章

    2

    浏览量

    6770
  • OpenHarmony
    +关注

    关注

    25

    文章

    3722

    浏览量

    16316

原文标题:对OpenHarmony中LiteOS的内核分析——超时原理和应用

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何利用OpenHarmony实现智能控设备面板的设计

    。如何实现多种家庭设备的集中管理和远程控制,是智能家居功能的体现。基于以上背景,本文提出了一种基于OpenHarmony设计实现智能控设备,目的是使开发者了解集成设备进行统一管理控制
    发表于 03-21 09:20

    深度剖析OpenHarmony应用/服务的逻辑结构

    OpenHarmony APP工程结构进行OpenHarmony应用/服务开发前,应该掌握OpenHarmony应用/服务的逻辑结构。
    发表于 04-12 11:11

    app图标动效openharmony的源码上哪里实现的?

    openharmony点击一个app图标的之后,应用会从左上角一点点放大直至铺满屏幕;我想问一下这个动效是openharmony的源码上的哪里实现的?
    发表于 06-10 11:01

    三步就能在OpenHarmony实现车牌识别

    识别结果如下所示:开发流程本车牌识别项目使用 OpenHarmony 的媒体子系统实现。代码基于停车场景下的本地车牌识别。进行讲解,其代码结构如下:三方库移植EasyPR 实现是基于
    发表于 07-06 11:20

    OpenHarmonyLiteOS的内核分析——超时原理和应用

    )。使用swtmr线程来处理若干超时的机制,可以有效减少系统需要的线程数目,从而节省系统资源的占用。总结本文描述了超时逻辑OpenHarmony
    发表于 07-11 17:47

    每日推荐 | 单片机毕业设计实例汇总,OpenHarmony 智能家居项目分享

    :本文描述了超时逻辑OpenHarmony实现,从原理,使用以及具体
    发表于 07-12 10:26

    Android实现屏幕关闭超时的正确方法是什么?

    CUSTOM IMX8MPlus 板上使用 Android 11.2.6。我想在 10 秒后实现屏幕超时,然后双击再次打开屏幕。 如果我 Settings.System
    发表于 04-14 07:15

    Qt For OpenHarmony

    OpenHarmony本身触屏的输入、鼠标/键盘的输入怎么能够把它映射到Qt本身的应用程序框架里去。需要了解Qt的QPA实现及系统接口调用的相关逻辑,就能实现Qt应用程序
    发表于 09-15 15:39

    基于公平心跳超时容错机制

    故障误判损失模型,提出公平误判损失(FMJL)算法,使其同时满足长作业和短作业要求;接着,设计并实现了基于FMJL算法的公平超时机制。实现了公平
    发表于 01-02 10:43 0次下载

    如何实现事件结构存在多个超时的功能

    实现事件结构存在多个超时的功能
    发表于 04-03 14:57 2次下载

    基于OpenCV开源库开发的OpenHarmony实现车牌识别

      张荣 OpenHarmony 知识体系工作组 介绍 本车牌识别项目是基于开源项目 EasyPR(Easy to do Plate Recognition)实现。EasyPR 是一个开源的中文车牌
    的头像 发表于 06-30 11:16 5408次阅读

    STM32程序超时设计

    软件超时机制 1、背景 嵌入式软件程序设计过程,经常会遇到超时(或定时)的处理情况,基本处理思想是
    的头像 发表于 06-22 10:52 1171次阅读
    STM32程序<b class='flag-5'>超时</b>设计

    Java CompletableFuture 异步超时实现探索

    简介 JDK 8 CompletableFuture 没有超时中断任务的能力。现有做法强依赖任务自身的超时实现。本文提出一种异步超时
    的头像 发表于 07-25 14:06 371次阅读

    socket连接超时如何处理

    实现以及网络环境。 1. 理解Socket连接超时 TCP/IP协议,socket连接超时通常指的是在建立连接、发送数据或接收数据的过程
    的头像 发表于 11-01 16:48 636次阅读

    socket 连接超时处理技巧

    在网络编程,Socket连接超时是一个常见的问题。处理超时的关键在于确保程序能够优雅地处理这些情况,避免程序崩溃或者无响应。以下是一些处理Socket连接超时的技巧。 1. 设置合理
    的头像 发表于 11-12 14:13 416次阅读