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

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.mfbz.cn/a/777473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过SDK使用百度智能云的图像生成模型SDXL

登录进入百度智能云控制台&#xff0c;在模型广场按照图像生成类别进行筛选&#xff0c;可以找到Stable-Diffusion-XL模型。点击Stable-Diffusion-XL模型的API文档后在弹出的新页面下拉可以找到SDK调用的说明。 import qianfandef sdxl(file: str, prompt: str, steps: int 2…

商品分页,商品模糊查询

一、商品分页 引入分页 定义分页主件的参数 在请求url上拼接参数 定义改变当前页码后触发的事件&#xff0c;把当前页码的值给到分页表单&#xff0c;重新查询 二、商品查询&#xff08;以商品的名称查询name为例&#xff09; 引入elementplus的from表单组件 定义一个FormData…

Spring源码十二:事件发布源码跟踪

上一篇我们在Spring源码十一&#xff1a;事件驱动中&#xff0c;介绍了spring refresh方法的initMessageSource方法与initApplicationEventMulticaster方法&#xff0c;举了一个简单的例子进行简单的使用的Spring为我们提供的事件驱动发布的示例。这一篇我们将继续跟踪源码&…

创建React项目

使用 create-react-app快速搭建开发环境 create-react-app 是一个快速创建React开发环境的工具&#xff0c;底层由Webpack构建&#xff0c;封装了配置细节&#xff0c;开箱即用。 安装npx npx是一个由Node.js官方提供的用于快速执行npm包中的可执行文件的工具&#xff0c;np…

如何给gitlab其他访问者创建账号并增加权限

嗨&#xff0c;今天创建了项目之后&#xff0c;我想把项目链接发送给其他人&#xff0c;让他下载这个项目&#xff0c;结果发现对方打开显示登录的界面&#xff0c;没错&#xff0c;他要想使用这个git下载项目&#xff0c;首先他的有一个git账号 接下来我找有权限的相关人员给他…

C语言之常用内存函数以及模拟实现

目录 前言 一、memcpy的使用和模拟实现 二、memmove的使用和模拟实现 三、memset的使用和模拟实现 四、memcmp的使用和模拟实现 总结 前言 本文主要讲述C语言中常用的内存函数&#xff1a;memcpy、memmove、memset、memcmp。内容不多&#xff0c;除了了解如何使用&#x…

前端根据目录生成模块化路由routes

根据约定大于配置的逻辑&#xff0c;如果目录结构约定俗成&#xff0c;前端是可以根据目录结构动态生成路由所需要的 route 结构的&#xff0c;这个过程是要在编译时 进行&#xff0c;生成需要的代码&#xff0c;保证运行时的代码正确即可 主流的打包工具都有对应的方法读取文…

在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)

#在生产环境中部署Elasticsearch&#xff1a;最佳实践和故障排除技巧——聚合与搜索&#xff08;三&#xff09; 前言 文章目录 前言- 聚合和分析- 执行聚合操作- 1. 使用Java API执行聚合操作- 2. 使用CURL命令执行聚合操作- 1. 使用Java API执行度量操作- 2. 使用CURL命令执…

Java——继承(Inheritance)

一、继承简要介绍 1、继承是什么 在Java中&#xff0c;继承是一种面向对象编程的重要特性&#xff0c;它允许一个类&#xff08;子类或派生类&#xff09;继承另一个类&#xff08;父类或基类&#xff09;的属性和方法。继承的目的是实现代码的重用和设计的层次化。 子类通常…

探索LlamaIndex:如何用Django打造高效知识库检索

简介 LlamaIndex&#xff08;前身为 GPT Index&#xff09;是一个数据框架&#xff0c;为了帮助我们去建基于大型语言模型&#xff08;LLM&#xff09;的应用程序。 主要用于处理、构建和查询自定义知识库。 它支持多种数据源格式 excel&#xff0c;txt&#xff0c;pdf&…

DaViT(ECCV 2022,Microsoft)

paper&#xff1a;DaViT: Dual Attention Vision Transformers official implementation&#xff1a;https://github.com/dingmyu/davit third-party implementation&#xff1a;https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/davit.py 出发点…

独家揭秘!格行随身WiFi‘骄傲’宣言背后的震撼行业的真相!随身WiFi行业内黑马

近几年以来&#xff0c;随行WiFi产品呈现爆发式增长&#xff0c;随行WiFi的火爆&#xff0c;是技术进步带给消费者的一种“福利”&#xff0c;各大直播间也充斥着品牌各异的随身WiFi。但真正脱颖而出、赢得消费者信赖的优质品牌却凤毛麟角。而其中最受欢迎的格行随身WiFi也因设…

Java语言+后端+前端Vue,ElementUI 数字化产科管理平台 产科电子病历系统源码

Java语言后端前端Vue,ElementUI 数字化产科管理平台 产科电子病历系统源码 Java开发的数字化产科管理系统&#xff0c;已在多家医院实施&#xff0c;支持直接部署。系统涵盖孕产全程&#xff0c;包括门诊、住院、统计和移动服务&#xff0c;整合高危管理、智能提醒、档案追踪等…

Stream练习

运用点&#xff1a; 流内数据类型转换(map)、filter、limit、skip、concat(让两个流合并) 题目&#xff1a; 操作1、2&#xff1a; ArrayList<String> manList new ArrayList<>();ArrayList<String> womanList new ArrayList<>();Collections.addAl…

C++之static关键字

文章目录 前提正文多重定义extern关键字使用staticstatic 全局变量(在.cpp文件中定义)static变量存放在哪里static变量可不可以放在.h文件中 static 函数static局部变量static 成员变量static 成员函数 总结参考链接 前提 好吧&#xff0c;八股&#xff0c;我又回来了。这次想…

8.14 矢量图层面要素2.5D渲染

文章目录 前言2.5D渲染QGis设置面符号为2.5D二次开发代码实现2.5D 总结 前言 本章介绍矢量图层面要素2.5D渲染的使用说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 2.5D渲染 2.5D渲染可以将多边形渲染为类3D效果。 QGis设置面符号为2.5D 以"hou…

数据库7.4

第二次作业 1.登陆数据库 2.创建数据库zoo 3.修改数据库zoo字符集为gbk 4.选择当前数据库为zoo 5.查看创建数据库zoo信息 6.删除数据库zoo C:\Windows\System32>mysql -uroot -p20040830Nmx mysql> create database zoo; alter database zoo character set gbk; mys…

Java springboot校园管理系统源码

Java springboot校园管理系统源码-014 下载地址&#xff1a;https://download.csdn.net/download/xiaohua1992/89364089 技术栈 运行环境&#xff1a;jdk8 tomcat9 mysql5.7 windows10 服务端技术&#xff1a;Spring Boot Mybatis VUE 使用说明 1.使用Navicati或者其它工…

VBA初学:零件成本统计之三(获取材料外协的金额)

第三步&#xff0c;从K3的数据库中获取金额 我这里是使用循环&#xff0c;通过任务单号将金额汇总出来&#xff0c;如果使用数组的话&#xff0c;还要按任务单写GROUP&#xff0c;还要去对应&#xff0c;不如循环直接一点 获取材料和外协金额的表格Sub getje()Dim rowcount A…

【JAVA入门】Day13 - 代码块

【JAVA入门】Day13 - 代码块 文章目录 【JAVA入门】Day13 - 代码块一、局部代码块二、构造代码块三、静态代码块 在 Java 中&#xff0c;两个大括号 { } 中间的部分叫一个代码块&#xff0c;代码块又分为&#xff1a;局部代码块、构造代码块、静态代码块三种。 一、局部代码块…