当前位置: 首页 > news >正文

定时器入门:Air780E定时器基础与进阶

今天我们学习的是Air780E定时器基础与进阶,让大家更深入的了解定时器。

一、定时器(timer)的概述

在Air780E模组搭载的LuatOS系统中,定时器(timer)是一项基础且关键的服务。它允许开发者在特定的时间点或周期性地执行代码段,为物联网设备的运行提供了精确的时间控制。

定时器在多种应用场景中都发挥着重要作用,如定时发送数据、周期性检查传感器状态等。

二、准备硬件环境

“古人云:‘工欲善其事,必先利其器。’在深入介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。”

2.1 Air780E 开发板

本demo使用的是 Air780E 核心板,此核心板的详细使用说明参考:
https://docs.openluat.com/air780e/product/,Air780E 产品手册公用产品资料 - 模组资料中心 (openluat.com)中的 << 开发板 Core_Air780E 使用说明 VX.X.X.pdf>>,写这篇文章时最新版本的使用说明为:20240419155721583_开发板Core_Air780E使用说明V1.0.5.pdf (vue2.cn);核心板使用过程中遇到任何问题,可以直接参考这份使用说明 pdf 文档。

2.2 SIM 卡

请准备一张可正常上网的SIM卡,该卡可以是物联网卡或您的个人手机卡。

特别提醒:
请确保SIM卡未欠费且网络功能正常,以便顺利进行后续操作。

2.3 PC 电脑

请准备一台配备USB接口且能够正常上网的电脑。

2.4 数据通信线

请准备一根用于连接 Air780E 开发板和 PC 电脑的数据线,该数据线将实现业务逻辑的控制与交互。您有两种选择:

  • USB 数据线(其一端为 Type-C 接口,用于连接 Air780E 开发板)。通常,这种数据线的外观如下示意图所示:

图片

普通的手机USB数据线一般都可以直接使用。

2.5 组装硬件环境

2.5.1 请按照 SIM 卡槽上的指示方向正确插入 SIM 卡,务必确保插入方向正确,避免插反导致损坏!

通常,插入 SIM 卡的步骤如下:

  • 将 SIM 卡的金属接触面朝下,对准卡槽的开口。

  • 用力平稳地将 SIM 卡推入卡槽,直至听到“咔嚓”一声,表示 SIM 卡已正确安装到位。

图片

 

图片

2.5.2 USB 数据线,连接电脑和 Air780E 开发板,如下图所示:

图片

图片

三、准备软件环境

“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。

3.1 Luatools 工具

要想烧录 AT 固件到 4G 模组中,需要用到的调试工具:Luatools;

下载地址:
https://docs.openluat.com/Luatools/

Luatools 工具集具备以下几大核心功能:

  • 一键获取最新固件:自动连接服务器,轻松下载最新的模组固件。

  • 固件与脚本烧录:便捷地将固件及脚本文件烧录至目标模组中。

  • 串口日志管理:实时查看模组通过串口输出的日志信息,并支持保存功能。

  • 串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求。

Luatools 下载之后, 无需安装, 解压到你的硬盘,点击 Luatools_v3.exe 运行,出现如下界面,就代表 Luatools 安装成功了:

图片

3.2 烧录代码

首先要说明一点:脚本代码, 要和固件的 LuatOS-SoC_V1112_EC618_FULL.soc 文件一起烧录。

整体压缩文件:内含有 文件一:Core 固件 和 文件二:定时器(timer)脚本文件 如下图所示。

图片

3.2.1 压缩文件:完整文件包

下载地址:
https://docs.openluat.com/air780e/luatos/app/service/timer/

3.2.2 压缩包内部文件

文件一:Core 固件

文件二:定时器(timer)脚本文件

3.2.3 找到烧录的固件文件

官网下载,底层 core 下载地址:SDK&Demo - 文档中心 (openluat.com)LuatOS 底层 core 注:本 demo 使用如图所示固件

图片

3.2.4 正确连接电脑和4G模组电路板

使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线;

3.2.5 识别4G模组的boot引脚

在下载之前,要用模组的boot引脚触发下载,也就是说,要把4G模组的boot引脚拉到1.8v,或者直接把boot引脚和VDD_EXT引脚相连。我们要在按下BOOT按键时让模块开机,就可以进入下载模式了。

具体到Air780E开发板:

1、当我们模块没开机时,按着BOOT键然后长按PWR开机。

2、当我们模块开机时,按着BOOT键然后点按重启键即可。

3.2.6 识别电脑的正确端口

判断是否进入 BOOT 模式:模块上电,此时在电脑的设备管理器中,查看串口设备, 会出现一个端口表示进入了 boot 下载模式,如下图所示:

图片

当设备管理器出现了 3 个连续数字的 com 端口,并且每个数字都大于 4,这时候, 硬件连接上就绪状态,恭喜你,可以进行烧录了!

3.2.7 新建项目

首先,确保你的 Luatools 的版本大于或者等于 3.0.6 版本.

在 Luatools 的左上角上有版本显示的,如图所示:

图片

Luatools 版本没问题的话, 就点击 Luatools 右上角的“项目管理测试”按钮,如下图所示:

图片

这时会弹出项目管理和烧录管理的对话框,如下图:

图片

3.2.8 开始烧录

选择780E板子对应的底层core和刚改的main.lua脚本文件。下载到板子中。

图片

图片

点击下载后,我们需要进入 boot 模式才能正常下载。

图片

四、定时器(timer)基本用法

4.1 本教程实现的功能定义:

  • 此次 demo 验证单次触发定时器和周期性触发定时器的基本功能。

  • 尝试展示了如何通过定时器回调函数执行特定任务。

  • 验证定时 sys.timerStopAll 和 sys.timerStop 的用法。

4.2 文章内容引用

  • 780E 开发板软硬件资料 :
    Air780E 产品手册公用产品资料 
    https://docs.openluat.com/air780e/luatos/app/service/timer/

  • 以上接口函数不做详细介绍,可通过此链接查看具体介绍:sys 库;sys - sys库 - LuatOS 文档

4.3 sys.timerStart

功能:启动一个定时器,该定时器在指定的延迟时间后执行回调函数,或者如果指定了重复次数,则周期性地执行回调函数。

函数原型:local timerId = sys.timerStart(func, timeout, repeat, arg1, arg2, ..., argN)

参数:

  • func:定时器触发时要执行的回调函数。

  • timeout:定时器启动后的延迟时间(以毫秒为单位),即定时器触发前需要等待的时间。

  • repeat(可选):指定定时器是否重复触发。如果为 0,则定时器只触发一次;如果为正整数,则定时器会重复触发指定的次数;如果为负整数(如-1),则定时器可能表示无限重复(具体取决于 LuatOS 的实现,但通常-1 用于无限循环)。

  • arg1, arg2, ..., argN(可选):传递给回调函数的参数,可以是多个。

例子:

图片

 

4.4 sys.timerStop

功能:停止一个已启动的定时器。

函数原型:sys.timerStop(timerId)

参数:timerId:要停止的定时器的唯一标识符。

例子:

图片

4.5 sys.timerLoopStart

功能:启动一个周期性定时器,该定时器会按照指定的时间间隔反复执行回调函数。。

函数原型:local timerId = sys.timerLoopStart(func, timeout, arg1, arg2, ..., argN)

参数:

  • func:定时器触发时要执行的回调函数。

  • timeout:定时器的时间间隔(以毫秒为单位),即每次触发之间的等待时间。

  • arg1, arg2, ..., argN:传递给回调函数的参数(可选),可以是多个。

返回值:返回定时器的唯一标识符 timerId,该标识符可用于后续停止定时器。

例子:

图片

4.6 sys.timerStopAll

功能:停止所有由指定回调函数启动的定时器,或者如果没有提供回调函数参数,则停止所有定时器。

函数原型:sys.timerStopAll([fnc])

参数:fnc(可选):一个回调函数。如果提供了这个参数,那么只有由这个回调函数启动的定时器会被停止。如果没有提供这个参数,那么所有的定时器都会被停止。

返回值:无。

例子:

图片

图片

五、定时器(timer)整体演示

5.1 成果演示与深度解析:视频 + 图文全面展示

5.1.1 成果运行精彩呈现

图片

5.1.2 演示视频生动展示

,时长00:18

5.1.3 完整实例深度剖析

图片

 

图片

六、常见问题

6.1 回调函数执行异常:

  • 如果定时器的回调函数中存在异常处理不当的情况,可能会导致程序崩溃或产生不可预知的行为。

  • 需要在回调函数中做好异常处理,确保程序的健壮性。

6.2 定时器冲突:

  • 在多个定时器同时存在的情况下,可能会存在定时器冲突的问题,即多个定时器同时触发或相互干扰。

  • 需要合理设计定时器的触发时间和周期,避免冲突的发生。

6.3 资源占用问题:

  • 定时器的创建、启动和停止等操作可能会占用一定的系统资源,如内存、CPU 等。

  • 在资源受限的嵌入式系统中,需要合理管理定时器的使用,避免资源过度占用。

6.4 定时器 ID 管理:

  • 在使用定时器接口函数时,通常会返回一个定时器 ID 用于后续操作。如果定时器 ID 管理不当,可能会导致无法正确停止或删除定时器。

  • 需要建立良好的定时器 ID 管理机制,确保定时器的正确操作。

6.5 定时器重复启动问题:

  • 在某些情况下,可能会不小心重复启动同一个定时器,导致多个相同的定时器同时存在。

  • 这可能会导致资源浪费或任务重复执行。需要确保定时器的唯一性和正确性。

图片

七、扩展

7.1 定时器的嵌套与递归

  • 嵌套定时器:在某些情况下,一个定时器的回调函数可能会启动另一个定时器。这种嵌套定时器的使用需要特别小心,以避免无限递归或资源耗尽。

  • 递归定时器:递归定时器是指一个定时器在其回调函数中重新启动自己。这种用法需要特别注意避免无限循环和堆栈溢出。

7.2 定时器的动态调整

  • 周期调整:在某些应用中,可能需要动态调整定时器的周期。这通常涉及停止当前定时器并重新启动一个新周期的定时器。

  • 任务优先级调整:对于某些实时性要求较高的任务,可能需要动态调整定时器的优先级,以确保任务能够及时执行。


分享完毕

相关文章:

定时器入门:Air780E定时器基础与进阶

今天我们学习的是Air780E定时器基础与进阶&#xff0c;让大家更深入的了解定时器。 一、定时器(timer)的概述 在Air780E模组搭载的LuatOS系统中&#xff0c;定时器&#xff08;timer&#xff09;是一项基础且关键的服务。它允许开发者在特定的时间点或周期性地执行代码段&…...

Java LeetCode练习

3216. 交换后字典序最小的字符串 package JavaExercise;public class Exercise {public static void main(String[] args) {String s "45320";Solution solution new Solution();System.out.println(solution.getSmallestString(s));} }class Solution {public St…...

go 集成go-redis 缓存操作

一、什么是Go Redis 这是一个流行的Go语言Redis客户端库&#xff0c;它提供了细化的API&#xff0c;对每个Redis命令的功能进行了封装&#xff0c;使得用户只需记住命令&#xff0c;具体的用法可以直接查看接口的声明&#xff0c;使用成本较低。go-redis对数据类型按照Redis底…...

python数据结构基础(3)

书接上文.要创建一个单链表类,首先是初始化方法: class singlelink:def __init__(self):self.head Noneself.tail Noneself.length0return 判断链表是否为空: def isempty(self):return self.length 0 向链表尾部添加节点: def add_node(self,item):if not isinstance(…...

java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl

用大模型做车牌号识别&#xff0c;最简单高效 在Java场景中&#xff0c;java识别车牌号的需求非常普遍。过去&#xff0c;我们主要依赖OCR等传统方法来实现java识别车牌号&#xff0c;但这些方法的效果往往不稳定。随着技术的发展&#xff0c;现在有了更先进的解决方案——大模…...

全局池化(Global Pooling)

普通池化操作看这里&#xff1a;最大池化&#xff08;Max Pooling&#xff09;和平均池化&#xff08;Average Pooling&#xff09; 全局池化&#xff08;Global Pooling&#xff09; 是一种特殊的池化方法&#xff0c;主要包括&#xff1a; 全局平均池化&#xff08;Global …...

ubuntu 24.04运行chattts时cuda安装错误原因分析

使用ubuntu 24.04&#xff0c;按照2noise/ChatTTS官方流程安装依赖时报错。ChatTTShttps://github.com/2noise/ChatTTS 这是因为cuda版本不对&#xff0c;ChatTTS目前的版本&#xff0c;要求支持cuda 12.4及以上&#xff0c;但是如果nvidia显卡驱动版本较老&#xff0c;无法支…...

使用 Cypher 查询语言在 Neo4j 中查找最短路径

使用 Cypher 查询语言在 Neo4j 中查找最短路径 引言1. Cypher 查询语言简介2. 查找最短路径的 Cypher 查询3. 代码解释3.1 MATCH 关键字3.2 pshortestPath(3.3 (bacon:Person {name:"Kevin Bacon"})3.4 -[*]-3.5 (meg:Person {name:"Meg Ryan"})3.6 )3.7 R…...

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…...

数据结构-数组(稀疏矩阵转置)和广义表

目录 1、数组定义 1&#xff09;数组存储地址计算示例①行优先②列优先 2&#xff09;稀疏矩阵的转置三元组顺序表结构定义 ①普通矩阵转置②三元组顺序表转置稀疏矩阵③稀疏矩阵的快速转置 3&#xff09;十字链表结构定义 2、广义表定义 1&#xff09;基本操作①GetHead②GetT…...

Java中的远程方法调用——RPC详解

1. 什么是RPC&#xff1f; RPC基础介绍 Java中的远程方法调用&#xff08;Remote Procedure Call&#xff0c;RPC&#xff09;是一种允许一个程序调用另一台计算机上方法的技术&#xff0c;就像在本地一样。RPC的核心思想是简化分布式计算&#xff0c;让我们可以跨网络调用远程…...

【kafka】大数据编写kafka命令使用脚本,轻巧简洁实用kafka

kafka是大数据技术中举足轻重的技术&#xff0c;市面上也有很多kafka的ui界面&#xff0c;但是都会占用比较大的内存和性能&#xff0c;这里我编写好了一个fakfa的脚本集成了kafka常见的命令使用。脚本资源放在文章顶部可自行拿取。 《Kafka 命令大全系统脚本使用指南》 在大数…...

交换区(Swap Area或Swap Partition)

在操作系统中&#xff0c;交换区&#xff08;Swap Area或Swap Partition&#xff09;扮演着至关重要的角色&#xff0c;主要用于在物理内存&#xff08;RAM&#xff09;不足时提供额外的虚拟内存空间。以下是交换区的主要功能和作用&#xff1a; 一、内存扩展 当系统的物理内…...

Excel 无法打开文件

Excel 无法打开文件 ‘新建 Microsoft Excel 工作表.xlsx",因为 文件格式或文件扩展名无效。请确定文件未损坏&#xff0c;并且文件扩展名与文件的格式匹配。...

MySQL —— Innodb 索引数据结构

文章目录 不用平衡二叉树或红黑树作为索引B树适合作为索引比B树更适合作为索引的结构——B树总结 MySQL 使用 B树索引数据结构&#xff08;因为默认使用 innodb 存储引擎&#xff09; B树&#xff1a;有序数组 平衡多叉树&#xff1b;B树&#xff1a;有序数组链表 平衡多叉树…...

探索C语言数据类型

目录 前言 一、基本数据类型 1.整型&#xff08;Integer&#xff09; 2.浮点型&#xff08;Floating - point&#xff09; 3.字符型&#xff08;Character&#xff09; 4.布尔型&#xff08;Boolean&#xff09; 二、派生数据类型 1.数组&#xff08;Array&#xff09…...

凌晨官宣离婚,他们为何让老粉直呼天塌?

你说的是影视飓风MediaStorm的创始人Tim和小鱼吧&#xff0c;他们确实在11月5日凌晨官宣离婚了。以下是具体介绍&#xff1a;官宣离婚2024年11月5日凌晨&#xff0c;影视飓风MediaStorm的创始人Tim&#xff08;潘天鸿&#xff09;在社交媒体上发文&#xff0c;宣布与小鱼&#…...

Spring Boot 导出 Excel 文件

本文将详细介绍如何使用 Spring Boot 和 Apache POI 实现 Excel 文件的导出功能&#xff0c;帮助开发者快速上手。 1. 准备工作 首先&#xff0c;确保你的 Spring Boot 项目已成功创建并运行。接下来&#xff0c;需要在 pom.xml 文件中添加 Apache POI 相关依赖&#xff0c;以…...

HTTPSOK:SSL/TLS证书自动续期工具

HTTPSOK 是一个支持 SSL/TLS 证书自动续期 的工具&#xff0c;旨在简化 SSL 证书的管理&#xff0c;尤其是自动化处理证书续期的工作。对于大多数网站而言&#xff0c;SSL 证书的续期是一项必要但容易被忽视的工作&#xff0c;因为 SSL 证书的有效期通常为 90 天。使用 HTTPSOK…...

Uniapp安装Pinia并持久化(Vue3)

安装pinia 在uni-app的Vue3版本中&#xff0c;Pinia已被内置&#xff0c;无需额外安装即可直接使用&#xff08;Vue2版本则内置了Vuex&#xff09;。 HBuilder X项目&#xff1a;直接使用&#xff0c;无需安装。CLI项目&#xff1a;需手动安装&#xff0c;执行yarn add pinia…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...