91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Task任務:LuatOS實現(xiàn)“任務級并發(fā)”的核心引擎

青山老竹農 ? 來源:jf_82863998 ? 作者:jf_82863998 ? 2025-08-28 13:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Task任務通過其強大的并發(fā)處理能力,使LuatOS能夠在單線程環(huán)境中模擬多線程執(zhí)行,通過協(xié)程的掛起與恢復機制,實現(xiàn)任務級的并行操作,顯著提升系統(tǒng)效能。

sys核心庫是LuatOS運行框架庫,也是LuatOS應用程序運行的核心大腦——所有LuatOS應用項目都會使用到sys核心庫。

sys核心庫提供了四大類功能:

Task任務

Message消息

Timer定時器

Run調度器

本文將分享sys核心庫Task任務相關函數(shù)及其簡要示例,幫助你更好地理解LuatOS開發(fā)基礎。

一、Task:LuatOS任務功能

Task分為基礎task和高級task兩種,二者主要區(qū)別如下:

從設計原理的角度來看:

所有的基礎task共享一個全局消息隊列;

每個高級task都有自己獨立的消息隊列,同時又能使用全局消息隊列。

從用戶使用的角度來看:

基礎task如果阻塞功能使用不當,可能會丟失自己應該處理的消息;

高級task如果阻塞功能使用不當,不會丟失自己應該處理的消息。

雖然從設計原理來看,高級task比基礎task使用起來不容易犯錯;但由于基礎task使用起來簡潔,基礎task還是需要掌握,一旦掌握之后,也不容易犯錯。

sys核心庫提供的task管理功能有以下幾種:

基礎task的創(chuàng)建和啟動運行:sys.taskInit(task_func, ...)

高級task的創(chuàng)建和啟動運行:sys.taskInitEx(task_func, task_name, non_targeted_msg_cbfunc, ...)

高級task管理表資源的釋放:sys.taskDel(task_name)

二、Task函數(shù)詳解

2.1 sys.taskInit(task_func, ...)

1)函數(shù)功能:

創(chuàng)建并且啟動運行一個基礎task。

2)注意事項:

可以在能夠執(zhí)行到的任意代碼位置使用此函數(shù);在LuatOS中,對創(chuàng)建的task數(shù)量沒有特別限制,只要ram夠用,可以一直創(chuàng)建。

3)參數(shù)說明:

▼ task_func ▼

參數(shù)含義:task的處理函數(shù);

數(shù)據(jù)類型:function;

取值范圍:任意有效的函數(shù)名都行;

是否必選:必須傳入此參數(shù)。

注意事項:

特別需要注意傳入的函數(shù)名的作用域,如果使用不當,很可能會使用一個無效的函數(shù)名。

如下代碼就是一個典型的錯誤示例:

wKgZPGiv5-iACp_RAAC84eO8O24799.png


正確參數(shù)示例:

如下所示,定義了一個函數(shù)led_task_func,led_task_func就可以做為此參數(shù)傳入。

wKgZO2iv6B2Ab6jhAABD64G4Qvw980.pngwKgZPGiv6L-AcURNAACBV_q0UV8648.png

4)返回值:

local task_object = sys.taskInit(task_func, ...)有一個返回值task_object

wKgZO2iv6PGAcTvwAABV4LiLftc926.png

5)函數(shù)示例:

wKgZO2iv6ROAM7cCAADgdQi0ZGE233.png

2.2 sys.taskInitEx(task_func, task_name, non_targeted_msg_cbfunc, ...)

1)函數(shù)功能:

創(chuàng)建并且啟動運行一個高級task。

2)注意事項:

可以在能夠執(zhí)行到的任意代碼位置使用此函數(shù);高級task的定義,參考本文第一章節(jié)的描述;在LuatOS中,對創(chuàng)建的task數(shù)量沒有特別限制,只要ram夠用,可以一直創(chuàng)建。

3)參數(shù)說明:

▼ task_func ▼

參數(shù)含義:task的處理函數(shù);

數(shù)據(jù)類型:function;

取值范圍:任意有效的函數(shù)名都行;

是否必選:必須傳入此參數(shù)。

注意事項:

特別需要注意傳入的函數(shù)名的作用域,如果使用不當,很可能會使用一個無效的函數(shù)名。

如下代碼就是一個典型的錯誤示例:

wKgZPGiv6pSAE7lCAADL6udbVBo051.png

正確參數(shù)示例:

如下所示,定義了一個函數(shù)led_task_func,led_task_func就可以做為此參數(shù)傳入。

wKgZPGiv6rqAHTykAABMRJLLHmM772.pngwKgZO2iv6tOAUT2-AABxR-AOj_M881.png

▼ non_targeted_msg_cbfunc ▼

參數(shù)含義:task的處理函數(shù)中使用:sys.waitMsg(task_name, msg, timeout)接口阻塞等待msg消息時,接收到msg之外的其他消息時的回調函數(shù)。

回調函數(shù)的格式為:

wKgZPGiv6wSAO8cRAAEGh7Oysjw008.png

回調函數(shù)是在task之外的業(yè)務邏輯中被執(zhí)行的;

在回調函數(shù)內部無法使用sys.wait(timeout)、sys.waitUntil(msg, timeout)、sys.waitMsg(task_name, msg, timeout)等必須用在task中的函數(shù)。

數(shù)據(jù)類型:function或者nil;

取值范圍:無特別限制;

是否必選:可選傳入此參數(shù)。

注意事項:

特別需要注意傳入的函數(shù)名的作用域,如果使用不當,很可能會使用一個無效的函數(shù)名。

如下代碼就是一個典型的錯誤示例:

wKgZO2iv6y6AYIkVAAEMISz2SIQ525.png

正確參數(shù)示例:

如下所示,定義了一個函數(shù)led_task_cbfunc,led_task_cbfunc就可以作為此參數(shù)傳入。

wKgZO2iv61uAALTXAACCJucmYkA905.pngwKgZO2iv63OAQUzjAAB8VUr8mH0753.png

4)返回值:

local task_object = sys.taskInitEx(task_func, task_name, non_targeted_msg_cbfunc, ...)

有一個返回值task_object。

wKgZO2iv65WAU_cYAABWDYO2oIM509.png

5)函數(shù)示例:

wKgZO2iv67-AEbufAAIoptU-P4E091.png

2.3 sys.taskDel(task_name)

1)函數(shù)功能:

刪除一個高級task對應的管理表資源。

2)注意事項:

可以在能夠執(zhí)行到的任意代碼位置使用此函數(shù);高級task的定義,參考本文第一章節(jié)的描述。

此函數(shù)僅僅刪除一個高級task對應的管理表資源,并不能刪除一個高級task。

一般來說,只有如下一個場景需要用到這個函數(shù):

在高級task的任務處理函數(shù)中,如果函數(shù)執(zhí)行結束,需要退出,在退出前執(zhí)行sys.taskDel(task_name);

高級task的任務處理函數(shù)執(zhí)行結束退出后,這個task就消亡了,消亡后這個task_name綁定的資源也沒用處了。

所以在退出之前執(zhí)行sys.taskDel(task_name),釋放資源,防止出現(xiàn)內存泄漏。

3)參數(shù)說明:

wKgZPGiv6-qADf8_AABv_0xP-BY051.png

4)返回值:nil

5)函數(shù)示例:

以下代碼片段演示一個task的處理函數(shù)在函數(shù)末尾退出前,執(zhí)行sys.taskDel函數(shù)的場景:

wKgZO2iv7A2AApTgAAEf6p3_3V0298.png


以下代碼片段演示一個task的處理函數(shù)在兩種場景下,執(zhí)行sys.taskDel函數(shù):

在中途的一個分支執(zhí)行return語句,退出處理函數(shù)前,執(zhí)行sys.taskDel函數(shù);

處理函數(shù)末尾退出前,執(zhí)行sys.taskDel函數(shù)。

wKgZO2iv7EaAO3MsAAGK-19hiis591.png


今天的內容就分享到這里了!

更多開發(fā)資料,詳見資料中心

—— docs.openluat.com

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • LuatOS
    +關注

    關注

    0

    文章

    156

    瀏覽量

    2689
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    LuatOS 框架的嵌入式系統(tǒng)架構設計原理

    API 接口,使開發(fā)者能用高級語言快速實現(xiàn)底層控制。這一設計顯著提升了開發(fā)效率,同時保持了良好的運行性能。 一、LuatOS框架中的概念 ? 在LuatOS中,有三個核心概念和一個調
    的頭像 發(fā)表于 02-03 15:57 ?93次閱讀
    <b class='flag-5'>LuatOS</b> 框架的嵌入式系統(tǒng)架構設計原理

    LuatOS 系統(tǒng)框架的模塊化設計原理

    裁剪功能,適應不同規(guī)模的嵌入式項目需求。 一、LuatOS框架中的概念 ? 在LuatOS中,有三個核心概念和一個調度器: 1、三個核心概念:任務
    的頭像 發(fā)表于 02-03 15:56 ?105次閱讀
    <b class='flag-5'>LuatOS</b> 系統(tǒng)框架的模塊化設計原理

    LuatOS框架的使用(上)

    環(huán)境搭建、模塊調用到任務調度,全面解析其開發(fā)流程與最佳實踐。 本篇文章主要講LuatOS 框架;LuatOS 框架是整個 LuatOS 開發(fā)中最基礎也是最
    的頭像 發(fā)表于 01-27 19:38 ?151次閱讀
    <b class='flag-5'>LuatOS</b>框架的使用(上)

    一文說透了如何實現(xiàn)單片機的多任務并發(fā)

    ,每個任務僅在分配到 CPU 時間片時才能執(zhí)行。時間片輪轉法可以保證所有任務都有機會被執(zhí)行,是一種非常公平的調度算法。 2. 優(yōu)先調度法 優(yōu)先調度法是多
    發(fā)表于 01-06 06:46

    FreeRTOS 空閑任務

    FreeRTOS 中很多人會注意到為什么有一個叫IDLE task任務占用了CPU百分之九十多的使用權,但是這個任務并沒有自己手動創(chuàng)建。原因就是這個空閑任務是系統(tǒng)自己創(chuàng)建的,每當系統(tǒng)
    發(fā)表于 12-04 07:35

    freertos關閉任務調度的方法

    #include \"FreeRTOS.h\" #include \"task.h\" /* 關閉任務調度 */ void
    發(fā)表于 11-17 06:47

    Swift 的并發(fā)系統(tǒng)并行運行多個任務

    ??前言 Swift 內置并發(fā)系統(tǒng)的好處之一是它可以更輕松地并行執(zhí)行多個異步任務,這反過來又可以使我們顯著加快可以分解為單獨部分的操作。 在本文中,讓我們看一下幾種不同的方法,以及這些技術中的每一種
    的頭像 發(fā)表于 11-11 11:33 ?437次閱讀

    FreeRTOS任務調度及優(yōu)先問題

    都有容錯,但是心里沒底,想向大家了解一下實際工作中有沒有遇到到類似的問題,如果有又是怎么解決的呢? 另外有前輩可以分享一下任務的優(yōu)先在實際項目中該基于什么原則來劃分呢?
    發(fā)表于 11-06 02:18

    揭秘LuatOS Task:多任務管理的“智能中樞”

    Task任務作為LuatOS核心組成部分,通過智能化的任務管理機制,實現(xiàn)任務的創(chuàng)建、調度與協(xié)同
    的頭像 發(fā)表于 08-28 13:48 ?633次閱讀
    揭秘<b class='flag-5'>LuatOS</b> <b class='flag-5'>Task</b>:多<b class='flag-5'>任務</b>管理的“智能中樞”

    同步任務開發(fā)指導

    ,推薦使用TaskPool。 定義并發(fā)函數(shù),內部調用同步方法。 創(chuàng)建任務Task,通過execute()接口執(zhí)行該任務,并對任務返回的結果
    發(fā)表于 06-19 07:57

    【RA4L1-SENSOR】05 按鍵實現(xiàn)RTOS任務切換

    在Stack--Threads中把ADC和按鍵任務也添加上。 ADC任務的symbol是ADC_Task,Name是ADC_Voltage,優(yōu)先2,Stack Size為256,內存
    發(fā)表于 06-16 22:38

    鴻蒙5開發(fā)寶藏案例分享---應用并發(fā)設計

    1:耗時任務并發(fā)——圖片解碼加速 痛點 :主線程解碼4K圖片導致界面卡死 // 步驟1:定義并發(fā)函數(shù) @Concurrent function decodeImage(imageData
    發(fā)表于 06-12 16:19

    快速入門——LuatOS:sys庫多任務管理實戰(zhàn)攻略!

    的開發(fā)者,這里將用最簡明的步驟,助你輕松實現(xiàn)任務應用開發(fā)! sys庫是LuatOS核心系統(tǒng)調度庫,它基于Lua協(xié)程機制實現(xiàn)了實時多
    的頭像 發(fā)表于 05-29 14:36 ?818次閱讀
    快速入門——<b class='flag-5'>LuatOS</b>:sys庫多<b class='flag-5'>任務</b>管理實戰(zhàn)攻略!

    基于LuatOS核心庫的實時操作系統(tǒng)開發(fā):從理論到實踐~

    實時系統(tǒng)的開發(fā)挑戰(zhàn)在于平衡響應時間與系統(tǒng)開銷。LuatOS核心庫通過時間片輪轉與優(yōu)先混合調度策略,既保證了高實時性任務的即時執(zhí)行,又為低優(yōu)先級任務
    的頭像 發(fā)表于 05-16 13:56 ?545次閱讀
    基于<b class='flag-5'>LuatOS</b><b class='flag-5'>核心</b>庫的實時操作系統(tǒng)開發(fā):從理論到實踐~

    LuatOS協(xié)程深度解析:小白也能10分鐘學會,代碼效率直接起飛!

    是基于Lua語言實現(xiàn)的協(xié)作式并發(fā)控制機制,專為嵌入式及物聯(lián)網(wǎng)場景設計, 其核心特點是通過用戶態(tài)任務調度,在單線程中模擬多任務執(zhí)行。
    的頭像 發(fā)表于 04-10 15:23 ?614次閱讀
    <b class='flag-5'>LuatOS</b>協(xié)程深度解析:小白也能10分鐘學會,代碼效率直接起飛!