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

【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(新的开篇)”】

目录

  • 【ESP32+freeRTOS学习笔记】系列新的开篇
  • ESP-IDF对FreeRTOS的适配
  • ESP-IDF环境中使用FreeRTOS的差异性简介
    • 关于FreeRTOS的配置
    • 关于ESP-IDF FreeRTOS Applications
  • 结语

【ESP32+freeRTOS学习笔记】系列新的开篇

ESP-IDF对FreeRTOS的适配

FreeRTOS是一个可以适用于多个不同MCU开发平台的操作系统。但为了更好的发挥操作系统的功能,更好的适应于不同的MCU架构,实际在使用时,还是需要对FreeRTOS做适配的。比如,ESP32系列MCU是一个双核的平台,因此在哪一个核内运行FreeRTOS的任务,在哪一个CPU内核中启动FreeRTOS等,这些都需要在FreeRTOS基础上,根据ESP32的特性做进一步的适配的。

乐鑫从ESP-IDF 4.0开始,直接将FreeRTOS内核以组件(Component)的形式集成到了IDF开发环境中。同时针对ESP32的双CPU内核的特性对FreeRTOS API进行了扩展。(具体可以查看ESP32对应的开发文档)。

因此,可以在ESP-IDF开发环境中方便的使用FreeRTOS。只需要在程序中包含相应的FreeRTOS头文件即可。而且使用时不用担心底层适配的问题。因此可以放心使用。

ESP-IDF环境中使用FreeRTOS的差异性简介

关于FreeRTOS的配置

FreeRTOS允许端口和应用程序通过添加各种#define config… 。通过这些宏,可以启用或禁用内核的调度行为和各种内核功能。但是,在ESP-IDF FreeRTOS中,FreeRTOSConfig.h 文件被视为私有文件,用户不得修改。任何向用户公开的FreeRTOS配置都将通过menuconfig完成。

ESP-IDF FreeRTOS可以在Component Config/FreeRTOS下的项目配置菜单(IDF.py menuconfig)中配置。如果在在VScode环境中,则在如下图标中的设置图标(线色圈)进入配置选项页。
在这里插入图片描述有关ESP-IDF FreeRTOS配置的完整列表,请参阅 Project Configuration

关于ESP-IDF FreeRTOS Applications

与独立的 FreeRTOS不同,用户不能在自已写的程序中调用vTaskStartScheduler()。相反,ESP-IDF FreeRTOS将自动启动。入口点是用户定义的void app_main(void)函数。
-> 通常,用户将从app_main派生其应用程序任务的其余部分。
-> app_main函数可以在任何时候返回(即,在应用程序终止之前)。
-> app_main函数是从main 任务调用的。main()任何是C语言中标准的入口程序。

main任务是ESP-IDF在启动期间自动生成的多个任务之一。这些任务包括:

启动期间创建的任务列表:

任务名运行内核优先级说明
Main Task (main)CPU 01简单调用app_main的任务。当app_main返回时,此任务将自动删除
Idle Tasks (IDLEx)CPU0 and CPU10为每个CPU创建(并固定到)的空闲任务
IPC Tasks (ipcx)CPU0 and CPU124为每个CPU创建(并固定到)IPC任务。IPC任务用于实现IPC功能。有关详细信息,请参阅处理器间调用( Inter-Processor Call )。

结语

在本篇之前,主要是针对FreeRTOS的使用和特性进行学习。自本篇开始,学习的内容侧重在于ESP-IDF环境中使用FreeRTOS的特殊性。这方面的学习主要是通过阅读ESP开发文档,以及在过程中通过对原码的阅读分析来探索本质。这样能更好的,深入的理解ESP以及FreeRTOS的运行机制。而不会出现人云亦云,不知所以然的情况。

相关文章:

【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(新的开篇)”】

目录【ESP32freeRTOS学习笔记】系列新的开篇ESP-IDF对FreeRTOS的适配ESP-IDF环境中使用FreeRTOS的差异性简介关于FreeRTOS的配置关于ESP-IDF FreeRTOS Applications结语【ESP32freeRTOS学习笔记】系列新的开篇 ESP-IDF对FreeRTOS的适配 FreeRTOS是一个可以适用于多个不同MCU开…...

Uipath Excel 自动化系列18-RefreshPivotTable(刷新透视表)

活动描述 RefreshPivotTable(刷新透视表):如果透视表的数据源发生变化,需使用刷新透视表活动,该活动需与Use Excel File 活动选择的 Excel 文件一起使用。 使用如下图: RefreshPivotTable(刷新透视表)属性 属性 作用 Display…...

设计模式之不变模式

在并行软件开发过程中,同步操作是必不可少的。当多线程对同一个对象进行读写操作时,为了保证对象数据的一致性和正确性,有必要对对象进行同步操作,但同步操作对系统性能有损耗。不变模式可以去除这些同步操作,提高并行…...

C++11 map

C11中Map的使用Map是c的一个标准容器&#xff0c;她提供了很好一对一的关系&#xff0c;在一些程序中建立一个map可以起到事半功倍的效果&#xff0c;总结了一些map基本简单实用的操作&#xff01;1. map最基本的构造函数&#xff1b;map<string , int >mapstring; map&l…...

docker基本命令 - 数据卷

作用 ● 做数据持久化。防止容器一旦停止运行&#xff0c;该容器中运行产生的数据就没了 ● 不同容器之间的数据共享(大鲸鱼背上各个小集装箱之间可以共享数据) 交互式命令使用 docker run -it -v / 宿主机的绝对路径目录:/容器内绝对路径目录 镜像名 docker run -it -v / 宿…...

SQL查漏补缺

有这么一道题&#xff0c;先看题目&#xff0c;表的内容如下 显示GDP比非洲任何国家都要高的国家名称(一些国家的GDP值可能为NULL)。 错误的查询&#xff1a; SELECT name FROM bbcWHERE gdp > ALL (SELECT gdp FROM bbc WHERE region Africa)正确的查询&#xff1a; SE…...

偏向锁撤销

偏向状态 一个对象创建时&#xff1a; 如果开启了偏向锁&#xff08;默认开启&#xff09;&#xff0c;那么对象创建后&#xff0c;markword 值为 0x05 即最后 3 位为 101&#xff0c;这时它的thread、epoch、age 都为 0。偏向锁是默认是延迟的&#xff0c;不会在程序启动时立…...

Qt版海康MV多相机的采集显示程序

创建对话框工程MultiCamera工程文件MultiCamera.pro#------------------------------------------------- # # Project created by QtCreator 2023-03-11T16:52:53 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): …...

2023年江苏省职业院校技能大赛中职网络安全赛项试卷-教师组任务书

2023年江苏省职业院校技能大赛中职网络安全赛项试卷-教师组任务书 一、竞赛时间 9:00-12:00&#xff0c;12:00-15:00&#xff0c;15:00-17:00共计8小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 基础设施设置与安全加固、网络安全事件响应、数…...

零基础小白如何自学网络安全成为顶尖黑客?

在成为黑客之前&#xff0c;你需要做两点准备&#xff1a; 1、学一门编程语言。学哪一门不重要&#xff0c;但你要参考一下下面的条例&#xff1a; C语言是Unix系统的基础。它&#xff08;连同汇编语言&#xff09;能让你学习对黑客非常重要的知识&#xff1a;内存的工作原理…...

外贸建站如何提高搜索引擎排名,吸引更多潜在客户?

在如今全球贸易日益繁荣的背景下&#xff0c;越来越多的企业开始重视外贸建站&#xff0c;并寻求提高搜索引擎排名以吸引更多潜在客户。 那么&#xff0c;如何才能有效地提高外贸网站的搜索引擎排名呢&#xff1f;本文将为您详细介绍几个有效的方法。 一、关键词优化 关键词…...

计算机网络考研-第一章学

计算机网学习总结第一章计算机系统概述1.1.1 导学1.1.2 操作系统的特征1.2 操作系统的发展与分类1.3 操作系统的运行环境1.3.1 操作系统的运行机制1.3.2 中断和异常1.3.3系统调用&#xff1a;1.3.4 操作系统的体系结构第一章总结第一章计算机系统概述 1.1.1 导学 1.1.2 操作系…...

【分布式版本控制系统Git】| Git概述、Git安装、Git常用命令

目录 一&#xff1a;概述 1.1. 何为版本控制 1.2. 为什么需要版本控制 1.3. 版本控制工具 1.4. Git 简史 1.5. Git 工作机制 1.6. Git和代码托管中心 二&#xff1a;安装 2.1. Git安装 三&#xff1a;常用命令 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地库…...

【人脸识别】ssd + opencv Eigenfaces 和 LBPH算法进行人脸监测和识别

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言ssd opencv Eigenfaces 和 LBPH算法进行人脸监测和识别1. ssd 目标监测2.opencv的三种人脸识别方法2.1 Eigenfaces2.2 LBPH前言 ssd opencv Eigenfaces 和 LB…...

PMP项目管理项目成本管理

目录1 项目成本管理概述2 规划成本管理3 估算成本4 制定预算5 控制成本1 项目成本管理概述 项目成本管理包括为使项目在批准的预算内完成而对成本进行规划、估算、预测、融资、筹资、管理和控制的各个过程&#xff0c;从而确保项目在批准的预算内完工。核心概念 项目成本管理旨…...

Vue3视频播放器组件Vue3-video-play入门教程

Vue3-video-play适用于 Vue3 的 hls.js 播放器组件 | 并且支持MP4/WebM/Ogg格式。 1、支持快捷键操作 2、支持倍速播放设置 3、支持镜像画面设置 4、支持关灯模式设置 5、支持画中画模式播放 6、支持全屏/网页全屏播放 7、支持从固定时间开始播放 8、支持移动端&#xff0c;移动…...

操作系统经典问题——消费者生产者问题

今日在学习操作系统的过程中遇到了这个问题&#xff0c;实在是很苦恼一时间对于这种问题以及老师上课根据这个问题衍生的问题实在是一头雾水。在网络上寻找了一些大佬的讲解之后算是暂时有了点茅塞顿开的感觉。 首先第一点什么是生产者——消费者问题&#xff1a; 系统中有一…...

网络安全工程师在面试安全岗位时,哪些内容是加分项?

金三银四已经来了&#xff0c;很多小伙伴都在困惑&#xff0c;面试网络安全工程师的时候&#xff0c;有哪些技能是加分项呢&#xff1f;接下来&#xff0c;我简单说说&#xff01; 去年我在微博上贴了一些在面试安全工作时会加分的内容&#xff0c;如下&#xff1a; 1. wooyu…...

前端整理 —— vue

1. vue的生命周期 经典爱问&#xff0c;感觉内容挺多的 介绍一下有哪几个 vue2中的生命周期有11个&#xff0c;分别为beforeCreate&#xff0c;created&#xff0c;beforeMount&#xff0c;mounted&#xff0c;beforeUpdate&#xff0c;updated&#xff0c;beforeDestroy&…...

HTML快速入门

目录HTML概念HTML基本格式基本语法常用标签1.文件标签&#xff1a;构成html最基本的标签2.文本标签&#xff1a;和文本有关的标签3.列表标签4.图片标签5.超链接标签6.表格标签7.表单标签HTML概念 HTML是最基础的网页开发语言&#xff0c;Hyper Text Markup Language&#xff0…...

哈希冲突

为什么会有哈希冲突&#xff1f;哈希表通过哈希函数来计算存放数据&#xff0c;在curd数据时不用多次比较&#xff0c;时间复杂度O&#xff08;1&#xff09;。但是凡事都有利弊&#xff0c;不同关键字通过相同哈希函数可能计算出来相同的存放地址&#xff0c;这种现象被称为哈…...

git添加子模块(submodule)

git添加子模块(submodule) 背景 有时候自己的项目需要用到别人的开源代码&#xff0c;例如 freertos 和 tinyusb 这个时候有两种选择 将开源的代码下载下来放到自己的 git 中管理 缺点&#xff1a;如果远端仓库更新&#xff0c;自己仓库的代码不会更新 将开源代码通过子模块…...

C++ 11 pair

class pair 可将两个 value视为一个单元。C标准库内多处用到了这个 class 。尤其是容器 map、multimap、unordered_map和 unordered_multimap就是使用 pair 来管理其以 key/value pair形式存在的元素。任何函数如果需要返回两个 value&#xff0c;也需要用到 pair&#xff0c;例…...

反向传播与随机梯度下降

反向传播实际上就是在算各个阶段梯度&#xff0c;每层的传入实际是之前各层根据链式法则梯度相乘的结果。反向传播最初传入的Δout是1&#xff0c;Δ通常表示很少量的意思&#xff0c;Δout1的时候这样在反向传播的时候算出来的dw和dx刚好就是当前梯度。深度神经网络中每层都会…...

一个conda引起的CPU异常

03/11/2023 登陆访问用户CPU异常 错误描述 早上向往常一样打开机器&#xff0c;突然感觉CPU有点"乱飙"&#xff0c;因为是个人机器&#xff0c;没有别人使用&#xff0c;所以感觉有点问题。 排错流程 首先查看各个进程的资源占用情况 top # 按住P&#xff0c;以CPU的…...

java Date 和 Calendar类 万字详解(通俗易懂)

Date类介绍及使用关于SimpleDateFormat类Calendar类介绍及使用LocalDateTime类介绍及使用关于DateTimeFormatter类一、前言本节内容是我们《API-常用类》专题的第五小节了。本节内容主要讲Date 类 和 Calendar 类&#xff0c;内容包括但不限于Date类简介&#xff0c;Date类使用…...

扩展欧几里得算法及其应用

前言 由于数论的板子真的很抽象&#xff0c;也很难背&#xff0c;所以特此记录扩展欧几里得算法的板子和它的用途 本篇文章只涉及应用&#xff0c;不涉及证明&#xff0c;如需理解证明还请各位移步其他优秀的讲解&#xff01; 扩展欧几里得算法 先粘一下板子的代码 typedef lo…...

JAVA练习75-全排列

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 3月11日练习内容 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目-…...

Linux下Docker安装mysql-超详细步骤

安装Docker Engine官方参考文档&#xff1a;https://docs.docker.com/engine/install/centos/若之前有安装docker&#xff0c;需要先卸载之前的dockersudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \d…...

弹性存储-对象存储OSS部分

对象存储介绍 对象存储&#xff08;object storage service&#xff0c;简称oss&#xff09;&#xff0c;具备与平台无关的rest api接口&#xff0c;可提供99.9999999999%&#xff08;12个9&#xff09;的数据持久性和99.995%的数据可用性。 OSS优势 功能介绍 存储空间bucke…...