精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    4748

    瀏覽量

    68356
  • 超時
    +關注

    關注

    0

    文章

    2

    瀏覽量

    6768
  • OpenHarmony
    +關注

    關注

    25

    文章

    3660

    瀏覽量

    16157

原文標題:對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 ?5356次閱讀

    STM32程序超時設計

    軟件超時機制 1、背景 嵌入式軟件程序設計過程,經常會遇到超時(或定時)的處理情況,基本處理思想是
    的頭像 發表于 06-22 10:52 ?1121次閱讀
    STM32程序<b class='flag-5'>超時</b>設計

    Java CompletableFuture 異步超時實現探索

    簡介 JDK 8 CompletableFuture 沒有超時中斷任務的能力。現有做法強依賴任務自身的超時實現。本文提出一種異步超時
    的頭像 發表于 07-25 14:06 ?310次閱讀

    socket連接超時如何處理

    實現以及網絡環境。 1. 理解Socket連接超時 TCP/IP協議,socket連接超時通常指的是在建立連接、發送數據或接收數據的過程
    的頭像 發表于 11-01 16:48 ?357次閱讀

    socket 連接超時處理技巧

    在網絡編程,Socket連接超時是一個常見的問題。處理超時的關鍵在于確保程序能夠優雅地處理這些情況,避免程序崩潰或者無響應。以下是一些處理Socket連接超時的技巧。 1. 設置合理
    的頭像 發表于 11-12 14:13 ?170次閱讀