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

    文章

    171

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LuatOS 框架的嵌入式系统架构设计原理

    API 接口,使开发者能用高级语言快速实现底层控制。这一设计显著提升了开发效率,同时保持了良好的运行性能。 一、LuatOS框架中的概念   在LuatOS中,有三个核心概念和一个调度器: 1、三个核心概念:任务
    的头像 发表于 02-03 15:57 252次阅读
    <b class='flag-5'>LuatOS</b> 框架的嵌入式系统架构设计原理

    LuatOS 系统框架的模块化设计原理

    裁剪功能,适应不同规模的嵌入式项目需求。 一、LuatOS框架中的概念   在LuatOS中,有三个核心概念和一个调度器: 1、三个核心概念:任务task),消息(message),
    的头像 发表于 02-03 15:56 290次阅读
    <b class='flag-5'>LuatOS</b> 系统框架的模块化设计原理

    LuatOS框架的使用(上)

    环境搭建、模块调用到任务调度,全面解析其开发流程与最佳实践。 本篇文章主要讲LuatOS 框架;LuatOS 框架是整个 LuatOS 开发中最基础也是最核心的内容,无论使用
    的头像 发表于 01-27 19:38 373次阅读
    <b class='flag-5'>LuatOS</b>框架的使用(上)

    LuatOS-Air转LuatOS常见故障排查手册

    LuatOS-Air脚本在LuatOS环境中运行失败,问题往往集中在几个关键模块:任务调度、外设驱动、网络配置和固件版本匹配。本文以故障排查的逻辑为主线,列出常见报错现象、可能原因及快速修复
    的头像 发表于 01-13 19:20 277次阅读
    <b class='flag-5'>LuatOS</b>-Air转<b class='flag-5'>LuatOS</b>常见故障排查手册

    一文说透了如何实现单片机的多任务并发!

    在嵌入式系统开发中,多任务并发是非常常见的,对于处理复杂的应用场景、提升系统的并发能力、提高系统的实时性等方面都有很大好处。在单片机中实现多任务并发是非常重要的,本文将为大家介绍如何在单片机中实现
    发表于 01-06 06:46

    什么是嵌入式操作系统?

    、嵌入式 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 530次阅读
    爱普科技PSRAM加速wisun无线模块<b class='flag-5'>多任务</b>处理

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

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

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

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

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

    局面。通过融合高速 5G 连接与集中式云管理平台,我们帮助品牌快速构建智能、可扩展的数字基础设施,无需承担光纤部署的高成本与长周期。   智能网络中枢 随时随地,
    的头像 发表于 09-04 11:02 1127次阅读
    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 643次阅读
    <b class='flag-5'>Task</b><b class='flag-5'>任务</b>:<b class='flag-5'>LuatOS</b>实现“<b class='flag-5'>任务</b>级并发”的核心引擎

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

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

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

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