将部分代码作为应用程序中的任务独立执行可以简化大型复杂问题的设计。 当有多个 CPU 时,任务支持还允许选定的功能并行运行。 本文将调查 Arduino 框架对 ESP32 系列设备的 FreeRTOS 任务支持。 除了少数例外,本材料适用于您可能遇到的其他使用 FreeRTOS 的硬件平台。

抢占式调度

在单核 MCU(微控制器单元)中,任何时刻只能执行一项任务。 正在执行的任务会一直运行,直到硬件计时器指示时间片已过期。 超时时,FreeRTOS 调度程序通过保存其寄存器来保存当前任务的状态。 据说当前任务已被计时器抢占。

然后调度程序选择另一个准备运行的任务。 准备好运行的最高优先级任务的状态在它停止的地方恢复和恢复。 时间片的持续时间足够小,MCU 每秒可以运行多个任务。 这称为并发处理。

硬件计时器对于并发处理至关重要,因为它可以防止一项任务独占 CPU。 陷入永无止境循环的任务不会阻止其他任务的执行。 最后,抢占式调度允许编写任务函数,就好像它是系统中唯一的程序一样。 程序员的意外之喜!

由于增加了 CPU,双核 ESP32 可以同时执行两个任务。 这可能完成两倍的工作。 然而,乐鑫芯片的命名约定可能会令人困惑。 ESP32 可以是单核或双核芯片。 还有ESP32-S,可能还是双核的。 最后,新的 ESP32-S2 是单核 CPU。 表 1 按标识符列出了一些常用的 ESP 芯片。

很多时候,双核程序可以适用于在单核处理器上运行,但看门狗定时器等复杂因素通常需要额外的措施。

Arduino启动

在我们回顾任务创建和控制之前,让我们检查一下您在程序开始时继承的 Arduino 环境。 您的程序是否在任务中启动? 确实如此! 除了您的任务之外,其他 FreeRTOS 任务也在后台执行。 其中一些任务提供服务,如定时器、WiFi、TCP/IP,蓝牙等。

表 2 说明了调用函数 setup() 和 loop() 时运行的 FreeRTOS 任务。 名为 loopTask 的任务是主要的 Arduino 任务,它调用函数 setup() 和 loop()。

标记为 Stack 的列表示未使用的堆栈字节(每个任务都需要自己的堆栈)。 此表按任务编号按时间倒序排序。 loopTask 是最后一个创建的任务。 缺少任务编号意味着其他任务已创建并在其工作完成时结束。 优先级列说明了分配的任务优先级,零代表最低执行优先级。

最后,双核 ESP32 上的任务在 CPU 0 和 CPU 1 之间分配。乐鑫将支持任务放在 CPU 0 中,而应用程序任务在 CPU 1 上运行。这样可以保持 WiFi、TCP/IP 和蓝牙等服务运行 无需特别考虑您的应用程序。 尽管有这个约定,您仍然可以在任一 CPU 中创建任务。自然,当使用单 CPU 平台时,一切都在 CPU 0 中运行。

从这个例子中,我们可以注意到一些有趣的点:

  • 请注意,这是一个 C 启动(由于 app_main() 的 extern “C” 声明)。

  • Arduino 初始化由 initArduino()执行。

  • 通过调用 xTaskCreatePinnedToCore() 创建和运行 loopTask

详情参阅 - 亚图跨际

ESP32实践FreeRTOS相关推荐

  1. 【ESP32】arduino中的ESP32实时系统FreeRTOS使用教程(一)

    ESP32 FreeRTOS 任务的状态 任务的优先级 创建任务 传递给任务函数的参数 结构体多参数传递 互斥量Mutex ESP32的双核心 固定频率运行任务 软件定时器 简单的本节略过,详细的可以 ...

  2. arduino环境esp32跑freertos系统实现触摸检测及wifi控制

    这个程序内容是通过touch0,touch4,touch5(由于使用touch1,touch2测试发现经常出现误触发)触摸传感器检测是否有触摸事件,有的话则向串口发送对应数据,wifi 工作在客户端模 ...

  3. ESP32使用freeRTOS的消息队列

    零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...

  4. esp32例子初始化流程

    esp32之freertos 既然用了操作系统,那很明显就是多线程(多任务)啦,而BLE来说,最少需要两个线程 controller层与host层两个线程处理,所以在主线程中会把这两个给初始化了.由于 ...

  5. 【与GPT对话】杂记

    对话ai-1 freertos的信号量实现机制 freertos实现外部资源函数受保护的响应10个事件 freertos写一个监听特定时间序列的不能被其他线程中断红外函数并将数据中的5个状态码解出来产 ...

  6. stm32项目平衡车详解(stm32F407)下

    stm32项目平衡车详解(stm32F407)下 本文章学习借鉴于创客学院团队,以表感谢.教学视频 B站学习地址 HC-SRO4 超声波测距避障功能开发 TSL1401 CCD摄像头实现小车巡线功能 ...

  7. 个人作品——桌面精灵(1)

    个人作品--桌面精灵(1) ​ 基于STM32单片机以STM32F103C8T6为核心控制配备ESP32运行FreeRtos,搭载LD3322,以实现通过WiFi协议技术实现HTTP协议制作网页界面和 ...

  8. 从另一个角度去解读Blinker,剖析精简源码,学习开源精神,菜鸟哥还是忍不住对它下手了

    文章目录 1.解读起因 2.解读点 2.1 解读硬性要求 3.解读过程 3.1 解读理念 3.1.1 官方说明 3.2 解读组合方式 3.2.1 绿色 -- 必选宏 BLINKER_BLE -- bl ...

  9. 【ESP32+freeRTOS学习笔记-开篇前言】

    目录 前言的前言 RTOS的选择 开发与实践环境 参考资料 笔记的形式 专题文章的链接(持续更新中......) 前言的前言 单片机的开发,也有两年多了,之前一直是做一些简单应用,因此以裸机开发的方式 ...

  10. micro-ROS之esp32与ros2资料(freertos)

    重中之重:micro.ros.org/docs/tutorials/core/overview/ 所有案例都是流畅稳定运行的. 比arduino+esp32+ros2稳定性好很多哦. eps32复位重 ...

最新文章

  1. 公司的API接口被刷了,那是因为你没这样做
  2. 3550配置DHCP
  3. TP v5中环境变量在项目中的应用
  4. smooth l1(huber)+binary cross entropy详解(tensorflow+pytorch)
  5. shell脚本判断文件类型
  6. python多线程写日志_python 多线程logger问题
  7. GPS各种地图坐标系转换(转载)
  8. Spring3.0_调试错误集
  9. vue slot插槽_Vue之路 | 08vue插槽slot使用
  10. android内存碎片问题优化梳理
  11. 支付宝小程序使用阿里图标
  12. 【python数据分析】分组聚合操作
  13. 【播放器】播放器对比
  14. 遇见狂神书说:JavaWeb保姆级教程
  15. Conda更新或安装包时出现Verifying transaction: failed+RemoveError的解决方法
  16. Arcgis desktop 10及Arcgis Engine 10破解
  17. linux系统python3环境下安装pymysql模块
  18. SAP 响应时间 性能察看
  19. 艾司博讯:拼多多价格竞争力不足怎么办
  20. 2022年数维杯国际赛ABCD题思路

热门文章

  1. 覆盖(重写)与重载的区别
  2. ArcGIS 发布自定义打印模板
  3. STM32 LL库延时函数 LL_mDelay解析
  4. windows7计算机用户账户,浅析win7旗舰版系统中三种系统用户账户的特点
  5. 快速分割多个视频,生成每个视频的m3u8
  6. 电脑开机后过一会就关机自动重启
  7. SQL Server 2008 SP3简体中文版官方下载
  8. 小端格式和大端格式(Little-EndianBig-Endian)
  9. LFI获取WENSHELL
  10. realme 制作一键root