【深海王国】小学生都能玩的语音模块?ASRPRO打造你的第一个智能语音助手(7)

news2025/4/9 6:55:17

Hi~ (o^^o)♪, 各位深海王国的同志们,早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω)

今天大都督继续为大家带来系列——小学生都能玩的语音模块,帮你一周内快速学会语音模块的使用方式,打造一个可用于智能家居、物联网领域的语音助手,let’s go!

(7)初识多线程

上节的最后我们发现,在进行彩虹循环和流光溢彩效果的过程中,ASRPRO无法同时执行新的指令,比如在循环过程中立即让灯灭掉。接下来我们就来解决这个问题。

官方多线程例程:

在范例教程中,官方也给出了多线程的使用教程:

在这里插入图片描述

但是官方的这些例程大部分都在ASRPRO-PLUS上运行,比如第一个例程的实现的效果是让板载LED按200ms闪烁,彩屏背光按700ms闪烁。

而我们需要实现的目标:让彩虹循环/流光溢彩运行的过程中,能够执行灭灯指令。跟例程四多线程使用–消息队列最相近,例程四的任务目标如下:

在这里插入图片描述

大家可以参考一下,其他官方例程写的也都很好很详细。

然后官方的多线程教程链接在这里,接下来的多线程代码块解释也大部分摘自这里,大家可以参考一下。

多线程模块

多线程代码块解释:

多线程代码块有9个:

在这里插入图片描述

他们的使用方式如下:

  1. 新建线程:使用多线程可以让多个任务在操作系统的调度下分时并行执行。可以在模块内修改线程名、优先级、占用内存,优先级数字越大级别越高,占用内存最高 512,需要根据程序整体合理分配。建议先设置最大,再慢慢减小,查看运行情况是否正常来确定最终大小。
  2. 新建队列消息:新建队列消息,可修改消息名、消息长度单位为字节、最多消息数。
  3. 向消息队列发送指针:发送消息,向消息队列发送指针,指针类型可以时变量、数组、结构,等待时间即为发送消息到队列的时间。
  4. 接收消息存入指针并设置等待时间:接收消息,在消息队列接收的数据存入到指针中,并可设置等待时间。
  5. 中断内部发送消息:功能跟3类似,在我们使用引脚中断后使用代替代码3,在中断内部发送消息。
  6. 软件定时器设置:软件定时器每隔一段时间运行触发事件,可设置单次运行和重复运行。
  7. 启动软件定时器:启动软件定时器。
  8. 停止软件定时器:停止软件定时器。
  9. 临界保护:让操作系统的任务调度时不会打断,不会打断里面程序的执行。

多线程代码块运行逻辑:

在以上代码中我们最常用的就是前5个,1为新建线程,2为新建队列消息,3为发送队列消息,4就是接受队列消息,5为使用引脚中断时发送队列消息。

接下来我们来描述一下多线程的代码运行逻辑:

  1. 首先我们需要使用代码1新建线程n个,例如新建A1、A2两个线程:

    在这里插入图片描述

  2. 在新建线程后我们要新建队列消息,这个队列消息可以在不同线程间传递信息,我们有n个线程就新建n个队列消息

    在这里插入图片描述

  3. 创建n+1个变量,其中1个变量用于帮助我们将3号或5号代码放进程序中,没有实际意义,如下:

    在这里插入图片描述在这里插入图片描述

    另外n个是用来储存我们的队列消息的,因为我们的n个队列消息会时时更新,所以我们需要n个临时变量来储存队列消息。如下,var无实际意义,rec_1、rec_2用来临时储存message1、message2的队列信息。

    在这里插入图片描述

  4. 在ASR_CODE主程序中,将需要发送的信息储存到队列消息message中,发送到另一个线程去:

    在这里插入图片描述

  5. 在对应线程里,添加如果执行模块,帮助我们把4号代码放进程序,然后接收队列消息。并且如果message中信息更新,就立即运行需要执行的程序:

    在这里插入图片描述

  6. 然后我们根据自己需要添加其他代码即可,比如我们的目标是让彩虹循环/流光溢彩运行的过程中,能够执行灭灯指令,所以我们在上电初始化的时候设置开灯、关灯两种语音指令,分别对应语音识别ID,1和2:

    在这里插入图片描述

整体的多线程运行逻辑流程图如下:

在这里插入图片描述

最后如果大家需要本节的工程文件,在公众号「深海大都督」里,回复「语音控制灯带」就能获得啦~

感谢你的关注,建设深海,没你不行!

今天的学习到这里就差不多啦。下节我们会继续ASRPRO多线程模式的学习,加油!看到这里的你今天也辛苦啦٩(ˊᗜˋ)و✧。

需要的相关材料链接我都放在公众号「深海大都督」里了,回复「语音控制灯带」就能获得啦~

哈哈,让焦虑不再蔓延,信息不再高壁,如果你觉得这篇文章对你有帮助,就来个免费的点赞吧!

(◍˃̶ᗜ˂̶◍)✩我深海大都督正式授予你深海王国公民的身份~

(・ω< )★ 加入深海大家庭,快乐摆烂每一天!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1902405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Towards Accurate and Robust Architectures via Neural Architecture Search

基于网络架构搜索的准确性与鲁棒性结构研究 论文链接&#xff1a;https://arxiv.org/abs/2405.05502 项目链接&#xff1a;未开源 Abstract 为了保护深度神经网络免受对抗性攻击&#xff0c;对抗性训练因其有效性而受到越来越多的关注。然而&#xff0c;对抗训练的准确性和鲁…

高级计算机体系结构--三次作业

homework1homework2homework3 homework1 简述 当代主流的并行机系统。 【答】 当代并行机系统主要有&#xff1a; 1&#xff09; 并行向量机&#xff08;PVP&#xff09; 2&#xff09; 对称多处理机&#xff08;SMP&#xff09; 3&#xff09; 大规模并行处理机&#xf…

【Nvidia+AI相机】涂布视觉检测方案专注提高锂电池质量把控标准

锂电池单元的质量在多个生产制造领域都至关重要&#xff0c;特别是在新能源汽车、高端消费电子等行业。这些领域的产品高度依赖锂电池提供持续、稳定的能量供应。优质的锂电池单元不仅能提升产品的性能和用户体验&#xff0c;还能确保使用安全。因此&#xff0c;保证锂电池单元…

47.HOOK引擎优化支持CALL与JMP位置做HOOK

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 上一个内容&#xff1a;46.修复HOOK对代码造成的破坏 以 46.修复HOOK对代码造成的破坏 它的代码为基础进行修改 优化的是让引擎支持从短跳JMP&#xff08;E9&…

nginx配置尝试

from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse, FileResponse, HTMLResponse import logging import os from datetime import datetime import uvicorn# 初始化日志 logging.basicConfig(filenamefile_server.lo…

机器学习之保存与加载

前言 模型的数据需要存储和加载&#xff0c;这节介绍存储和加载的方式方法。 存和加载模型权重 保存模型使用save_checkpoint接口&#xff0c;传入网络和指定的保存路径&#xff0c;要加载模型权重&#xff0c;需要先创建相同模型的实例&#xff0c;然后使用load_checkpoint…

Redis基础教程(十三):Redis lua脚本

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

vue3【提效】使用 VueUse 高效开发(工具库 @vueuse/core + 新增的组件库 @vueuse/components)

Vueuse 是一个功能强大的 Vue.js 生态系统工具库&#xff0c;提供了可重用的组件和函数&#xff0c;帮助开发者更轻松地构建复杂的应用程序。 官网 &#xff1a;https://vueuse.org/core/useWindowScroll/ 安装 VueUse npm i vueuse/core vueuse/components&#xff08;可选&a…

VideoAgent——使用大规模语言模型作为代理来理解长视频

概述 论文地址&#xff1a;https://arxiv.org/pdf/2403.10517 本研究引入了一个新颖的基于代理的系统&#xff0c;名为 VideoAgent。该系统以大规模语言模型为核心&#xff0c;负责识别关键信息以回答问题和编辑视频。VideoAgent 在具有挑战性的 EgoSchema 和 NExT-QA 基准上进…

讲个SystemVerilog随机约束小坑

正文 记录个在写SystemVerilog随机约束时遇到的一个小坑&#xff0c;如果没有认真去查看随机结果是否符合预期&#xff0c;还真不容易发现。 为了方便讲述&#xff0c;写了如下示例代码。类cl_a里有个随机变量aa&#xff0c;初始值为222。在module top里对类cl_a例化并进行约…

释放区块链数据科学的力量

如今&#xff0c;区块链技术和数据科学是两项最先进、最不可预测的技术。数据科学已被证明可以使用区块链技术作为原始数据源来了解有关系统运行的信息。 通过将区块链技术与数据科学相结合&#xff0c;软件开发、金融和其他领域的创造性改进已经成为可能。 在本文中&#xf…

【HTML】-解决页面内容无法选择、复制问题

目录 1、网页内容无法选中 1.1、问题原因 1.2、解决脚本 1.2.1、开启控制台窗口 1.2.2、执行脚本命令 2、内容复制弹出阻止框 2.2、解决脚本 1、网页内容无法选中 1.1、问题原因 今天在访问某一网站平台&#xff0c;需要将内容进行选择、复制时发现不可使用。 在使用…

MATLAB-分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类)

MATLAB-分类CPO-RF-Adaboost冠豪猪优化器&#xff08;CPO&#xff09;优化RF随机森林结合Adaboost分类预测&#xff08;二分类及多分类&#xff09; 分类CPO-RF-Adaboost冠豪猪优化器&#xff08;CPO&#xff09;优化RF随机森林结合Adaboost分类预测&#xff08;二分类及多分类…

[Vite]Vite插件生命周期了解

[Vite]Vite插件生命周期了解 Chunk和Bundle的概念 Chunk&#xff1a; 在 Vite 中&#xff0c;chunk 通常指的是应用程序中的一个代码片段&#xff0c;它是通过 Rollup 或其他打包工具在构建过程中生成的。每个 chunk 通常包含应用程序的一部分逻辑&#xff0c;可能是一个路由视…

公务员考试、事业编考试、教师资格证、面试、K12资料、电子书

点击上方△腾阳 关注 作者 l 腾阳 转载请联系授权 你好&#xff0c;我是腾阳。 在这个自媒体的海洋里&#xff0c;我曾是一只迷失方向的小鸟&#xff0c;多次尝试飞翔却总是跌跌撞撞。 但每一次跌倒&#xff0c;都让我更坚定地相信&#xff0c;只要不放弃&#xff0c;总…

---java KMP算法---

对于在一段字符串中查找一段字符串&#xff0c;如果用数组遍历的方法那就效率低下&#xff0c;所以产生了效率更高的KMP算法 KMP算法查只需要遍历一次字符串就可以找出第一次出现的目标字符串 要学的话建议区b站看视频&#xff0c;学着由视频学者比较容易 我这里就提供下我实…

html的作业

目录 作业题目 1.用户注册 A图 B代码 2.工商银行电子汇款单 A图 B代码 3.李白诗词 A图 B代码 4.豆瓣电影 A图 B代码 学习产出&#xff1a; 作业题目 1.用户注册 A图 B代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset&qu…

rider使用libman

问题 rider没有libman的相关功能&#xff0c;需要使用cli 安装Libman dotnet tool install -g Microsoft.Web.LibraryManager.Cli # 如果存在可以尝试更新 dotnet tool update -g Microsoft.Web.LibraryManager.Cli查看命令 libman --help初始化 cdnjs官网 libman init安…

记录excel表生成一列按七天一个周期的方法

使用excel生成每七天一个周期的列。如下图所示&#xff1a; 针对第一列的生成办法&#xff0c;使用如下函数&#xff1a; TEXT(DATE(2024,1,1)(ROW()-2)*7,"yyyy/m/d")&" - "&TEXT(DATE(2024,1,1)(ROW()-1)*7-1,"yyyy/m/d") 特此记录。…

【PWN · ret2shellcode | sandbox-bypass | 格式化字符串】[2024CISCN · 华东北赛区]pwn1_

一道栈ret2shellcodesandbox&#xff08;seccomp&#xff09;格式化字符串的题目 前言 ret2shellcode&#xff0c;已经不是简单的放到栈上、ret这样一个简单的过程。套一层seccomp的沙箱&#xff0c;打ORW又遇到open受限等等&#xff0c;考虑的蛮多。过程中收获最多的可以说是…