ESP32FreeRTOS开发笔记:1.双核并行

news2024/9/21 18:51:00

        ESP32 的 Arduino 框架内部集成了 FreeRTOS,允许开发者利用其多任务处理功能。在代码中,xTaskCreatePinnedToCore 函数是 FreeRTOS 提供的 API,用于创建任务并指定任务在哪个核心上运行。

        FreeRTOS 是一个流行的实时操作系统内核,广泛用于嵌入式系统中,以实现任务调度、任务间通信和同步等功能。通过使用 FreeRTOS,开发者可以更高效地管理多个并发任务,从而提高系统的性能和响应能力。在 ESP32 的 Arduino 框架中,FreeRTOS 的集成使得开发者可以轻松地创建和管理多任务,而无需深入了解 FreeRTOS 的底层细节。

    下面我将编写一个示例,探索ESP32的多任务处理能力。在示例中,我们将创建两个任务——Task1和Task2,分别在ESP32的两个核心上运行。每个任务在其循环中打印当前运行的核心编号,并通过延迟函数模拟任务执行时间。

  1. 任务函数声明Task1 和 Task2 是两个任务函数,它们将在不同的核心上运行。
  2. setup() 函数:初始化串口通信,并使用 xTaskCreatePinnedToCore 函数创建两个任务,分别在核心0和核心1上运行。
  3. loop() 函数:主循环可以保持空闲,或者执行其他任务。在这个示例中,主循环只是简单地延迟1秒钟。
  4. Task1 和 Task2 函数:这两个函数分别在不同的核心上无限循环,每秒钟打印一次当前运行的核心编号。
  5. 堆栈大小10000 是任务的堆栈大小,可以根据实际需求进行调整。
  6. 任务优先级1 是任务的优先级,可以根据实际需求进行调整。
  7. 核心编号0 和 1 分别表示核心0和核心1。

        详细代码如下:

#include "Arduino.h"

// 任务函数声明
void Task1(void *pvParameters);
void Task2(void *pvParameters);

void setup() {
  Serial.begin(115200);
  delay(1000); // 等待串口监视器启动

  // 创建任务1,在核心0上运行
  xTaskCreatePinnedToCore(
    Task1,    // 任务函数
    "Task1",  // 任务名称
    10000,    // 堆栈大小
    NULL,     // 任务参数
    1,        // 任务优先级
    NULL,     // 任务句柄
    0);       // 核心编号

  // 创建任务2,在核心1上运行
  xTaskCreatePinnedToCore(
    Task2,    // 任务函数
    "Task2",  // 任务名称
    10000,    // 堆栈大小
    NULL,     // 任务参数
    1,        // 任务优先级
    NULL,     // 任务句柄
    1);       // 核心编号
}

void loop() 
{
  delay(1000);
}

// 任务1函数
void Task1(void *pvParameters) {
  for (;;) {
    Serial.println("Task1 running on Core: " + String(xPortGetCoreID()));
    delay(1000); // 模拟任务执行时间
  }
}

// 任务2函数
void Task2(void *pvParameters) {
  for (;;) {
    Serial.println("Task2 running on Core: " + String(xPortGetCoreID()));
    delay(1000); // 模拟任务执行时间
  }
}

打开串口调试助手,可以看到结果如下:

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

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

相关文章

信息打点web篇--语言开发框架,组件识别

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本章节主要整理 识别语言开发框的打点内容 框架简介 高效理解:把用于做某些事的代码封装起来,使用者无需自己写代码直接一个函数就能完成本该很多行才能完成的功能。 例子:我们要写网站,…

Open3D 点云Kmeans聚类算法

目录 一、概述 1.1算法介绍 1.2实现步骤 二、代码实现 三、实现效果 3.1原始点云 3.2聚类后点云 前期试读,后续会将博客加入该专栏,欢迎订阅Open3D与点云深度学习的应用_白葵新的博客-CSDN博客 一、概述 1.1算法介绍 聚类是一种将数据集分组的方…

Qml 图片和加载器操作

学习目标:Qml 图片和加载器编程 学习前置 Qt Qml编程 基础部分 认识qml-CSDN博客 实现效果 对图片的基本操作 加载器 核心代码 加载器 思路: 创建一个加载器 默认是几个圆点,我们重写加载器元素(contentItem)&…

文献阅读:高效和稳健的 π-FISH rainbow 用于多种生物分子的多重原位检测

文献介绍 文献题目: Highly efficient and robust π-FISH rainbow for multiplexed in situ detection of diverse biomolecules 研究团队: 曹罡(华中农业大学)、戴金霞(华中农业大学) 发表时间&#xff…

RSA算法(C++)

RSA加解密过程 RSA为非对称加密算法,由一对公钥和一对私钥构成,私钥加密公钥解密,公钥加密私钥解密 如下图,D为私密的,假设传输英文字母,我们给英文字母编号A1,B2,C3… RSA加解密过程 两对密钥产生方法如下 C Op…

网络通信基本知识

网络通信 什么是网络通信? 通信网络是指将各个孤立的设备进行物理连接,实现人与人,人与计算机,计算机与计算机之间进行信息交换的链路,从而达到资源共享和通信的目的。 什么是网络协议? 网络协议是计算机…

Python函数 之 参数

1.参数的简单介绍 参数 形式参数(形参):在函数定义的时候,在括号中写⼊变量,这个变量就称为是函数的参数。实际参数(实参):在函数调⽤的时候,可以给定义时候的形参传递具体的数据值,供其使⽤。注: 在函数调⽤的时候,会将函数的实…

wps 将列的内容转换为一个单元格内容,并以逗号分隔

wps 将列的内容转换为一个单元格内容,并以逗号分隔 1.首先在一个空白单元格输入 2.输入函数TEXTJOIN 这个函数有三个参数,第一个:以什么分隔符分隔,第二个:是否忽略空白格,true:忽略 false:不忽略 第三个&…

怎么使用代理IP?如何检测代理IP是否有效?

代理IP是一种网络代理技术,它是通过中间服务器来转发网络请求的IP地址。当我们使用代理IP时,我们的真实IP地址会被隐藏起来,而代理服务器的IP地址会被用作我们的身份标识。使用代理IP的步骤如下: 1.选择合适的代理服务器 考虑服务…

【微信小程序知识点】转发功能的实现

转发功能,主要帮助用户更流畅地与好友分享内容与服务。 想实现转发功能,有两种方式: 1.页面js文件必须声明onShareAppMessage事件监听函数,并自定义转发内容。只有定义了此事件处理函数,右上角菜单才会显示“转发”按…

WebStorm 使用 ESLint 自动格式化代码

WebStorm 不能像 VSCode 那样在保存的时候自动 Fix-ESLint,不能自动格式化代码,需要安装一个插件 安装 ESLint 插件 进入设置快捷键 win:CtrlAltS mac: command, 找到 Plugins,搜索eslint 在这里插入图片描述 安装后配置一下 …

【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式

注释: RTCM响应消息1020为GLONASS星历信息,暂不介绍,前公司暂未研发RTCM消息类型版本的DR/RTK模块,DR/RTK模块仅NMEA消息类型使用 注释: 公司使用的多信号语句类型为MSM4&MSM7,也应该是运用最广泛的语句…

从新手到进阶:高效设计 Tableau 可视化的 5 种技巧 | 数据可视化分析

让我们一起跟着大神学习五个超实用的技巧,加速你的可视化分析之旅! 在日常分析中,人人都想实现可视化最佳实践。然而,对于很多初学者来说,在还未熟练掌握 Tableau 的情况下,这种愿望貌似不太符合实际。 为…

【想心静?】红尘中修炼的功夫,才是真正的功夫

刘君亮想要去山中静坐,先生说: 你若是以厌弃身外事物的心去静中寻求天理,反而只会养出骄傲怠惰的习气。你若能不厌弃身外事物,然后再到静处涵养天理,却是好的。 去一个安静的地方,去沉静一下自己的内心也…

电子画册制作流程技巧大揭秘

​随着科技的发展,电子画册已经逐渐取代传统纸质画册,成为展示企业形象、传播信息的重要工具。一份精美的电子画册,不仅能提升企业品牌形象,还能吸引更多潜在客户。那么,如何制作一份既精美又实用的电子画册呢&#xf…

YOLOv8损失函数改进-增加MPDIoU提升边界框回归精度【附代码】

文章目录 前言文章概述必要环境一、修改方法1.修改配置文件2. 增加 MPDIoU3. 修改 BboxLoss类4. 修改 v8DetectionLoss 类的 init 方法 二、训练代码三、训练过程总结 前言 本篇博客我们将详细介绍如何在 YOLOv8项目中增加 MPDIoULoss,包括如何修改配置文件、增加新…

U盘打不开难题解析:原因、恢复与预防全攻略

在日常生活中,U盘作为一种便捷的数据存储设备,深受大家的喜爱。然而,有时我们可能会遇到U盘打不开的情况,这不仅令人困扰,还可能导致重要数据的丢失。那么,当U盘打不开时,我们该如何应对呢&…

[PM]原型与交互设计

原型分类 1.草图原型 手绘图稿, 规划的早期,整理思路会使用 2.低保真原型 简单交互, 无需配色, 黑白灰为主, 产品规划和评审阶段使用 标准化的低保真原型是高保真原型的基础 3.高保真原型 复杂交互, 一般用于公开演示, 产品先产出低保真原型, 设计师根据原型产出设计稿 低保…

2024-07-12 Unity AI状态机1 —— 框架介绍

文章目录 1 有限状态机2 状态机实现框架2.1 StateMachine2.2 BaseState2.3 ...State2.4 IAIObject 3 框架类图 本文章参考 B 站唐老狮 2023 年直播内容。点击前往唐老狮 B 站主页。 1 有限状态机 ​ 有限状态机(Finite - State Machine,FSM&#xff09…

如何让招投标数据成为企业决策的金钥匙?

在当今数据驱动的时代,招投标信息作为行业竞争情报的重要组成部分,正日益成为企业制定战略决策的关键依据。本文将深入探讨招投标数据采集的重要性,以及它如何为企业决策提供强有力的数据支持,同时揭秘如何高效、精准地获取这些数…