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

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

3天内不再提示

揭秘LuatOS Task:多任务管理的“智能中枢”

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2025-08-28 13:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Task任务作为LuatOS的核心组成部分,通过智能化的任务管理机制,实现任务的创建、调度与协同运行,让复杂应用得以高效并行处理,满足实时场景下的严苛需求。

sys核心库是LuatOS运行框架库,也是LuatOS应用程序运行的核心大脑——所有LuatOS应用项目都会使用到sys核心库。

sys核心库提供了四大类功能:

Task任务

Message消息

Timer定时器

Run调度器

本文将分享sys核心库Task任务相关函数及其简要示例,帮助你更好地理解LuatOS开发基础。

一、Task:LuatOS任务功能

Task分为基础task和高级task两种,二者主要区别如下:

从设计原理的角度来看:

所有的基础task共享一个全局消息队列;

每个高级task都有自己独立的消息队列,同时又能使用全局消息队列。

从用户使用的角度来看:

基础task如果阻塞功能使用不当,可能会丢失自己应该处理的消息;

高级task如果阻塞功能使用不当,不会丢失自己应该处理的消息。

虽然从设计原理来看,高级task比基础task使用起来不容易犯错;但由于基础task使用起来简洁,基础task还是需要掌握,一旦掌握之后,也不容易犯错。

sys核心库提供的task管理功能有以下几种:

基础task的创建和启动运行:sys.taskInit(task_func, ...)

高级task的创建和启动运行:sys.taskInitEx(task_func, task_name, non_targeted_msg_cbfunc, ...)

高级task管理表资源的释放:sys.taskDel(task_name)

二、Task函数详解

2.1 sys.taskInit(task_func, ...)

1)函数功能:

创建并且启动运行一个基础task。

2)注意事项:

可以在能够执行到的任意代码位置使用此函数;在LuatOS中,对创建的task数量没有特别限制,只要ram够用,可以一直创建。

3)参数说明:

▼ task_func ▼

参数含义:task的处理函数;

数据类型:function;

取值范围:任意有效的函数名都行;

是否必选:必须传入此参数。

注意事项:

特别需要注意传入的函数名的作用域,如果使用不当,很可能会使用一个无效的函数名。

如下代码就是一个典型的错误示例:

wKgZPGiv5-iACp_RAAC84eO8O24799.png


正确参数示例:

如下所示,定义了一个函数led_task_func,led_task_func就可以做为此参数传入。

wKgZO2iv6B2Ab6jhAABD64G4Qvw980.pngwKgZPGiv6L-AcURNAACBV_q0UV8648.png

4)返回值:

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

wKgZO2iv6PGAcTvwAABV4LiLftc926.png

5)函数示例:

wKgZO2iv6ROAM7cCAADgdQi0ZGE233.png

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

1)函数功能:

创建并且启动运行一个高级task。

2)注意事项:

可以在能够执行到的任意代码位置使用此函数;高级task的定义,参考本文第一章节的描述;在LuatOS中,对创建的task数量没有特别限制,只要ram够用,可以一直创建。

3)参数说明:

▼ task_func ▼

参数含义:task的处理函数;

数据类型:function;

取值范围:任意有效的函数名都行;

是否必选:必须传入此参数。

注意事项:

特别需要注意传入的函数名的作用域,如果使用不当,很可能会使用一个无效的函数名。

如下代码就是一个典型的错误示例:

wKgZPGiv6pSAE7lCAADL6udbVBo051.png

正确参数示例:

如下所示,定义了一个函数led_task_func,led_task_func就可以做为此参数传入。

wKgZPGiv6rqAHTykAABMRJLLHmM772.pngwKgZO2iv6tOAUT2-AABxR-AOj_M881.png

▼ non_targeted_msg_cbfunc ▼

参数含义:task的处理函数中使用:sys.waitMsg(task_name, msg, timeout)接口阻塞等待msg消息时,接收到msg之外的其他消息时的回调函数。

回调函数的格式为:

wKgZPGiv6wSAO8cRAAEGh7Oysjw008.png

回调函数是在task之外的业务逻辑中被执行的;

在回调函数内部无法使用sys.wait(timeout)、sys.waitUntil(msg, timeout)、sys.waitMsg(task_name, msg, timeout)等必须用在task中的函数。

数据类型:function或者nil;

取值范围:无特别限制;

是否必选:可选传入此参数。

注意事项:

特别需要注意传入的函数名的作用域,如果使用不当,很可能会使用一个无效的函数名。

如下代码就是一个典型的错误示例:

wKgZO2iv6y6AYIkVAAEMISz2SIQ525.png

正确参数示例:

如下所示,定义了一个函数led_task_cbfunc,led_task_cbfunc就可以作为此参数传入。

wKgZO2iv61uAALTXAACCJucmYkA905.pngwKgZO2iv63OAQUzjAAB8VUr8mH0753.png

4)返回值:

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

有一个返回值task_object。

wKgZO2iv65WAU_cYAABWDYO2oIM509.png

5)函数示例:

wKgZO2iv67-AEbufAAIoptU-P4E091.png

2.3 sys.taskDel(task_name)

1)函数功能:

删除一个高级task对应的管理表资源。

2)注意事项:

可以在能够执行到的任意代码位置使用此函数;高级task的定义,参考本文第一章节的描述。

此函数仅仅删除一个高级task对应的管理表资源,并不能删除一个高级task。

一般来说,只有如下一个场景需要用到这个函数:

在高级task的任务处理函数中,如果函数执行结束,需要退出,在退出前执行sys.taskDel(task_name);

高级task的任务处理函数执行结束退出后,这个task就消亡了,消亡后这个task_name绑定的资源也没用处了。

所以在退出之前执行sys.taskDel(task_name),释放资源,防止出现内存泄漏。

3)参数说明:

wKgZPGiv6-qADf8_AABv_0xP-BY051.png

4)返回值:nil

5)函数示例:

以下代码片段演示一个task的处理函数在函数末尾退出前,执行sys.taskDel函数的场景:

wKgZO2iv7A2AApTgAAEf6p3_3V0298.png


以下代码片段演示一个task的处理函数在两种场景下,执行sys.taskDel函数:

在中途的一个分支执行return语句,退出处理函数前,执行sys.taskDel函数;

处理函数末尾退出前,执行sys.taskDel函数。

wKgZO2iv7EaAO3MsAAGK-19hiis591.png


今天的内容就分享到这里了!

更多开发资料,详见资料中心

—— docs.openluat.com


审核编辑 黄宇

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

    关注

    0

    文章

    134

    浏览量

    2580
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    什么是嵌入式操作系统?

    、嵌入式 OS 的核心作用(嵌入式开发中最实用的 3 个功能) 1. 多任务管理: 裸机开发的痛点:所有功能写在一个main函数的循环里,代码臃肿、逻辑混乱,一个功能出问题会影响整个系统; RTOS
    发表于 12-09 10:33

    多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?

    多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?
    发表于 12-04 06:37

    嵌入式系统软件架构通常划分

    嵌入式系统的软件架构通常划分如下分层设计: 应用层:环境温度监测、报警触发逻辑。 中间件层:支持MQTT协议的网络通信模块,用于将温度数据上传至云端。 操作系统层:基于FreeRTOS进行多任务管理
    发表于 12-01 07:20

    爱普科技PSRAM加速wisun无线模块多任务处理

    爱普科技256Mb PSRAM(如APS256XXN-OBR-BG)为WiSUN无线模块提供高速数据缓存与临时存储解决方案,其166MHz速率、1.8V低功耗及小尺寸封装显著提升模块在智能电网、工业自动化中的多任务处理能力和稳定性。
    的头像 发表于 10-14 09:25 231次阅读
    爱普科技PSRAM加速wisun无线模块<b class='flag-5'>多任务</b>处理

    教程来啦!LuatOS中的消息通信机制详解及其应用场景

    LuatOS 的消息机制是其多任务协作和事件驱动编程的核心部分,主要通过 sys 核心库实现。 消息机制包括消息的发送、接收、订阅,以及系统消息的定义和使用,下面分别详细描述其原理和使用方法。 一、LuatOS 消息机制的原
    的头像 发表于 09-26 18:59 256次阅读
    教程来啦!<b class='flag-5'>LuatOS</b>中的消息通信机制详解及其应用场景

    能碳管理平台:让校园管理 “能效双升” 的智慧中枢

    模糊、管理成本高昂等诸多挑战。在此形势下,构建一个集数据感知、智能分析、协同管控于一体的古河云科技能碳管理平台,正成为驱动校园迈向精细化、智能化、绿色化
    的头像 发表于 09-17 11:40 298次阅读
    能碳<b class='flag-5'>管理</b>平台:让校园<b class='flag-5'>管理</b> “能效双升” 的智慧<b class='flag-5'>中枢</b>

    中枢-外周-中枢闭环康复是正解吗

    HUIYINGCPC闭环康复概述CPC(中枢-外周-中枢)闭环康复(图1)是一种整合中枢干预(如tDCS、TMS、BCI)与外周干预(如任务导向训练、功能性电刺激)的康复模型,旨在通过
    的头像 发表于 09-13 16:04 782次阅读
    <b class='flag-5'>中枢</b>-外周-<b class='flag-5'>中枢</b>闭环康复是正解吗

    5G CPE:为连锁门店管理打造的智能网络中枢

    局面。通过融合高速 5G 连接与集中式云管理平台,我们帮助品牌快速构建智能、可扩展的数字基础设施,无需承担光纤部署的高成本与长周期。   智能网络中枢 随时随地,
    的头像 发表于 09-04 11:02 773次阅读
    5G CPE:为连锁门店<b class='flag-5'>管理</b>打造的<b class='flag-5'>智能</b>网络<b class='flag-5'>中枢</b>

    Task任务LuatOS实现“任务级并发”的核心引擎

    Task任务通过其强大的并发处理能力,使LuatOS能够在单线程环境中模拟多线程执行,通过协程的挂起与恢复机制,实现任务级的并行操作,显著提升系统效能。 sys核心库是
    的头像 发表于 08-28 13:49 355次阅读
    <b class='flag-5'>Task</b><b class='flag-5'>任务</b>:<b class='flag-5'>LuatOS</b>实现“<b class='flag-5'>任务</b>级并发”的核心引擎

    突破LuatOS开发瓶颈:三个二次开发必备知识揭秘

    遇到LuatOS开发难题?或许你忽略了这三个关键常识。它们看似简单,却能破解资源管理、效率提升等瓶颈问题,为你的项目注入新活力,实现技术跃迁。 本期一起来了解LuatOS开发需要熟悉的几个常识
    的头像 发表于 06-23 15:05 270次阅读
    突破<b class='flag-5'>LuatOS</b>开发瓶颈:三个二次开发必备知识<b class='flag-5'>揭秘</b>!

    【RA4L1-SENSOR】05 按键实现RTOS任务切换

    与计数功能的切换,为之后的多任务切换做个铺垫。 2. 软件部分 将上次的实验工程复制一份,重命名为05_Button_Switch_Task 2.1 绑定按键IO &&
    发表于 06-16 22:38

    快速入门——LuatOS:sys库多任务管理实战攻略!

    在嵌入式开发中,多任务管理是提升系统效率的关键。本教程专为快速入门设计,聚焦LuatOS的sys库,通过实战案例带你快速掌握多任务创建、调度与同步技巧。无论你是零基础新手还是希望快速提升开发效率
    的头像 发表于 05-29 14:36 619次阅读
    快速入门——<b class='flag-5'>LuatOS</b>:sys库<b class='flag-5'>多任务管理</b>实战攻略!

    揭秘LuatOS:实时操作系统RTOS核心库的关键技术剖析!

    为满足实时控制场景的严苛需求,LuatOS核心库采用抢占式调度策略,确保高优先级任务即时响应。通过静态内存分配和零拷贝通信机制,系统不仅避免了动态内存碎片问题,还大幅提升了任务间数据交换效率,适用于
    的头像 发表于 05-21 16:02 532次阅读
    <b class='flag-5'>揭秘</b><b class='flag-5'>LuatOS</b>:实时操作系统RTOS核心库的关键技术剖析!

    LuatOS协程深度解析:小白也能10分钟学会,代码效率直接起飞!

    嵌入式开发如何兼顾效率与简洁?LuatOS协程给出完美答案!它用类线程的语法封装异步逻辑,让多任务开发像单线程一样简单。本文用图文并茂的方式拆解协程原理,10分钟带你轻松入门!   LuatOS协程
    的头像 发表于 04-10 15:23 464次阅读
    <b class='flag-5'>LuatOS</b>协程深度解析:小白也能10分钟学会,代码效率直接起飞!

    工业网络管理新纪元:揭秘五大“利器”,化繁为简的智慧转型

    本期导读 在这个万物互联的时代,工业网络作为智能制造的“神经中枢”,其复杂性与日俱增。面对海量设备、多样化协议、实时数据处理以及安全防护等挑战,如何高效管理工业网络,确保生产流畅与数据安全,成为企业
    的头像 发表于 12-21 17:51 792次阅读
    工业网络<b class='flag-5'>管理</b>新纪元:<b class='flag-5'>揭秘</b>五大“利器”,化繁为简的智慧转型