ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RTOS介绍------十、Multicore Systems

2022-02-01 20:00:32  阅读:249  来源: 互联网

标签:Core ESP32 RTOS SMP 任务 Multicore 内核 ------ 运行


Concepts

Asymmetric multiprocessing 非对称多核 (AMP) 和 symmetric multiprocessing 对称多核 (SMP)的区别。
在这里插入图片描述

AMP 是一种编程范式,它使用多个内核或处理器同时运行多个任务。 它需要一个核心/处理器作为运行操作系统 (OS) 的主核。 它将工作发送到其他核,称为辅核。 请注意,这些内核可能是也可能不是相同的架构。 事实上,您可以在不同的计算机上设置 AMP 配置。

SMP 也是一种范式,它允许多线程程序在多个内核上运行。 但是,在 SMP 中,每个内核运行操作系统的副本。 每个核中的调度程序独立运行,从共享列表中选择运行任务。 SMP 要求内核紧密耦合,通常共享 RAM 和其他资源。 因此,您通常会发现 SMP 构建在同一架构的多个内核之上。

ESP-IDF 是对 FreeRTOS 的修改,配置用于 SMP 操作。 ESP32 使用 Xtensa LX6 处理器,您遇到的大多数变体都包含两个内核。
在这里插入图片描述

ESP-IDF 操作系统支持将任务固定到内核,这意味着您可以分配其中一个内核来运行特定任务。 它还支持“无关联”的任务,这意味着该任务可以在任一核心上运行。

ESP32 中的内核标记为“Core 0”和“Core 1”。 Core 0 被称为“Protocol Core”或“PRO CPU”。 在默认的 ESP32 应用程序中,与协议相关的任务(如 WiFi 和蓝牙)分配给此内核。 Core 1 被称为“Application Core”或“APP CPU”,负责运行用户应用程序。

注意这是默认行为。 当然也可以自由地将任务分配给任一核或为任务选择“无关联”。 但是,对于大多数微控制器应用程序,我们建议将任务固定到内核(您将很快看到)。

每个内核都维护自己的中断列表、定时器列表,如果是运行 ESP-IDF,还包括调度程序。 RAM 在内核之间共享,但为 Core 0 缓存留出一部分 RAM,为 Core 1 缓存留出另一部分。

每当任一核中的调度程序运行时,它都会查看任务的共享列表以查看哪个任务处于就绪状态。 它将选择 处于就绪状态并具有最高优先级的任务。 但是,只有当该任务的 xCoreID 字段为“无关联”或与调用处理器核心编号匹配时,它才会运行该任务。

因为您的特定双核微控制器可能与 ESP32 不同,我建议您阅读处理器的文档。 这是一篇很棒的文章,向您展示了 ESP-IDF 在 ESP32 中的工作原理:https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/freertos-smp.html

对于许多通用操作系统,将任务列为“无关联”并让调度程序选择它运行在哪个内核上通常更容易。 这样做的好处是更易于使用,并且会在平衡处理负载的同时自动优化任务之间的 CPU 使用时间。

但是,许多处理器(包括 ESP32)要求中断服务程序(ISR)在设置中断的内核中运行。 结果,你可能不知道什么时候会打断一个“无关联”的任务。 此外,每当任务移动到不同的核心时,新核心都会遇到缓存未命中,并且需要使用该任务的数据更新其缓存。

在这里插入图片描述
这些问题使得精确预测处理器中任务的时间变得更加困难。 如果您的应用程序需要高确定性,您可能希望将任务固定到核心。

Recommended Reading

introduction-to-rtos-solution-to-part-12-multicore-systems:https://www.digikey.com/en/maker/projects/introduction-to-rtos-solution-to-part-12-multicore-systems/369936f5671d4207a2c954c0637e7d50
ESP-IDF FreeRTOS SMP Changes: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/freertos-smp.html
ESP32 Interrupt Allocation (specifically, see the “Multicore Issues” section): https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/intr_alloc.html
Adding simple mutlicore support to FreeRTOS: https://www.freertos.org/2020/02/simple-multicore-core-to-core-communication-using-freertos-message-buffers.html

标签:Core,ESP32,RTOS,SMP,任务,Multicore,内核,------,运行
来源: https://blog.csdn.net/cesare20/article/details/122737225

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有