前言
2023年Zephyr开发者大会(ZDS)于6月27日至30日在捷克布拉格隆重举行。与以往两次不同,本次ZDS由Zephyr项目规划和管理,并作为首届嵌入式开源峰会(EOSS)的一部分进行。在这个令人期待已久的盛会中,全球Zephyr开发者们共同探讨了Zephyr实时操作系统(RTOS)的最新技术与发展趋势。作为一款开源、灵活和可扩展的嵌入式实时操作系统,Zephyr项目在2014年由英特尔发起,2016年作为Linux基金会项目正式面向公众启动,得到了全球范围内的广泛关注和采用。
ZDS 2023共70余个技术报告,涵盖了使用指导与展示、新功能与技术、架构修改与操作系统、多核异构与虚拟化、模拟器、测试、工业流程与代码管理、安全性、应用案例、工具与调试等丰富多样的内容。湖大嵌入式实验室的小伙伴们将对本次大会的所有技术报告进行逐一收集、整理与分享,尽最大努力为Zephyr开发者提供ZDS 2023技术报告的开发经验、实践成果以及解决方案的参考。
今天分享第49篇技术报告,由彭盼整理,题目为:
在ESP32上启用支持AMP的多图像应用程序”
作者简介
Sylvio Alves目前在Expressif Systems(乐鑫科技)担任嵌入式软件工程师,同时在Zephyr RTOS项目中为ESP32家族提供支持。他在嵌入式领域工作已超过15年,拥有多个框架和芯片家族的开发经验。
文章简介
本文将讨论使用非对称多处理器(AMP)的ESP32对多图像的支持,还会提供一些关于关键安全和系统健壮性的背景知识。此外,本文还将给出一个支持多图像的示例代码,其中CPU0运行网络通信,CPU1用于运行关键代码。
在ESP32上启用支持AMP的多图像应用程序
引言
近年来,Zephyr实时操作系统上利用对称多处理(SMP)方法支持图像功能的发展令人瞩目。这激发了我们使用非对称多处理(AMP)方法支持图像功能的探索。在2017年的Zephyr 1.9.0版本中首次提交了对ESP32的支持。从2017年到2020年,Expressif ESP32在Zephyr上的支持仅限于I2C和GPIO外设。在构建应用程序时,应用程序只能在RAM中运行,而不能在闪存中执行。后来,随着Expressif公司的加入,Zephyr对Expressif ESP32的支持逐渐完善起来,从对常规ESP32的支持到仅带Wi-Fi功能的单核版本ESP32-S2,再到ESP32 C3,这一系列的支持越来越能够满足不同的应用需求。
Zphyr对ESP32系列的支持
目前最新的进展为2023年6月的工作。
为什么要使用多镜像和AMP(非对称多处理)
在Zephyr环境中探索这些技术有几个重要原因。首先,它可以增加产品的性能,使网络/蓝牙堆栈和应用程序能够在不同核心上运行,实现专用处理任务。其次,它支持多种固件架构,如Zephyr RTOS和裸机,同时实现快速启动、系统完整性和安全性。举例来说,这些技术可以应用于电机场定向控制、传感器融合算法、人机界面设备、图像处理和摄像头输入,以及利用硬件和CPU处理的机器学习和人工智能算法。通过采用这些方法,可以满足从实时控制到高级数据处理的各种应用需求,并同时优化性能和资源利用。
多核处理器之间的数据交换由OpenAMP(OpenAsymmetric Multi Processing)框架处理。
OpenAMP使用RPMsg(消息传输协议)作为传输层来操作数据。
RPMsg利用VirtIO MAC层来构建和分配数据包,通过环形缓冲区和结构化数据包进行处理。
VirtIO则使用IPC(进程间通信)作为物理层。
在Zephyr操作系统中,IPC被实现为IPM(进程间邮箱)。
当数据在不同核心之间交换时,IPC负责通知另一个核心有关可用数据的信息。
AMP对ESP32的支持
ESP32上的AMP支持采用了共享内存的IPM(Interprocessor Mailbox)方式。DRAM内存被分为三个区域
CPU0 RAM区域
CPU1 RAM区域
IPM的RAM区域 尚未完全由DTS文件处理
每个CPU被视为SoC/Board,不支持外设共享,远程(CPU1)应用程序从RAM中运行,正在进行MCUBoot多镜像支持开发。
项目演示
演示设置架构
演示设置的硬件
NEMA23 电机和驱动器
SHT3X 温度传感器
ESP32-S3 Box Lite设备
集成 ST7789v显示屏
通用按钮接口
麦克风和扬声器
项目建立
CPU0文件结构
CPU1文件结构
项目运行