esp32程序启动和参数对比

在esp32中程序执行基于freertos多任务系统实现的,FreeRTOS依靠一个叫做”tick“的定时中断来驱动整个FreeRTOS的有序运行。这个tick中断是一个基于具体硬件定时器中断。时间周期可以在程序编译前设定。由于tick每隔一个固定周期中断一次,因此整个FreeRTOS的所有与任务调度相关的工作都在这个tick中断处理程序中完成。从而使所以任务有序依次运行。

实时操作系统RTOS是保证在一定时间限制内完成特定功能的操作系统。调度机制是RTOS的核心能力,所以有关的任务相关的操作,时间的操作,内存管理,资源管理等都是紧紧围绕调度机制而设计的。

RTOS主要功能

多任务的能力,包括,创建任务,驱动任务,管理任务状态,删除任务等能力。

通信能力,包括任务与任务之间,任务与中断之间的通信能力。

调度机制,以某种规则对任务运行进行切换,控制。

内存管理,以某种方式分配,使用,回收对应任务及资源的内存。

资源分配,包括资源的分配,保护,互斥等功能。

时间时序,包括基准时间生成,定时器等

FreeRTOS (IDF) - ESP32-C3 - — ESP-IDF 编程指南 v5.2.3 文档

xTaskCreate() 和 xTaskCreatePinnedToCore() 都是FreeRTOS中用于创建任务的函数,它们的主要区别在于任务被调度到哪个核心上运行。

xTaskCreate():

这是最基本的任务创建函数,任务将由FreeRTOS调度器分配到可用的核心上运行。
调用形式:xTaskCreate(taskFunction, taskName, stackDepth, parameters, priority, taskHandle)。
这个函数不指定任务运行在哪个核心上,FreeRTOS调度器将根据系统负载和可用资源自动分配任务到不同的核心。
xTaskCreatePinnedToCore():

这个函数与xTaskCreate()相似,但是允许你明确指定任务应该被调度到哪个核心上运行。
调用形式:xTaskCreatePinnedToCore(taskFunction, taskName, stackDepth, parameters, priority, taskHandle, coreID)。
coreID 参数用于指定任务应该运行在哪个核心,0表示核心0,1表示核心1。
使用 xTaskCreatePinnedToCore() 可以更为精细地控制任务的分配,在利用ESP32的双核特性时。可以根据任务的性质和系统负载,将不同的任务分配到不同的核心上,以达到更好的性能和资源利用率。

如果不需要显式指定任务运行在哪个核心上,xTaskCreate() 就足够了。而如果需要更精细的控制,或者利用ESP32的双核,使用 xTaskCreatePinnedToCore()。

应用程序的启动流程

一级引导程序 被固化在了 ESP32-S3 内部的 ROM 中,它会从 flash 的 0x0 偏移地址处加载二级引导程序至 RAM (IRAM & DRAM) 中。

二级引导程序 从 flash 中加载分区表和主程序镜像至内存中,主程序中包含了 RAM 段和通过 flash 高速缓存映射的只读段。

应用程序启动阶段 运行,这时第二个 CPU 和 RTOS 的调度器启动。

esp32 https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_cn.pdf

c3:https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_cn.pdf

s3 https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_cn.pdf

ESP32s3是一款功能强大的Wi-Fi和蓝牙双模芯片,内置两个处理核心(核心0和核心1)。FreeRTOS作为ESP32的操作系统,提供了多任务支持,可以使得这两个核心同时工作,双核,包含核心0(CPU0)和核心1(CPU1),在不使用freeRTOS情况下程序是跑在核心1上,而核心0主要运行WIFI和bluetooth,如果我们的项目不频繁使用WIFI蓝牙,建议使用多核工作模式,提高我们单片机性能。

提高性能: 在两个核心上同时执行任务,可以显著提高系统整体性能,尤其是在需要执行大量计算任务或者对实时性要求较高的场景下。

实现并行处理: 可以将不同的任务分配到不同的核心上,实现并行处理,提高系统的响应速度。

降低功耗: 在低功耗应用场景下,将任务分散到不同核心上运行,可以通过灵活的控制核心的工作状态来实现功耗的降低。

idf编译流程

使用 Ninja 作为生成器来运行 CMake。
指定 Python 解释器的位置。
启用了 ccache(一个用于加速重复编译的工具)。
设置目标平台(芯片,没有设置 IDF_TARGET,使用默认的目标平台 esp32)
指定项目目录

找到 Git 版本 组件目录中找到 CMakeLists.txt 文件,如果有就添加组件到工程,不然不会添加任何第三方组件

将使用 ccache 来加快重新编译的速度

使用编译器是 GNU

检查编译器是否正常

开始为目标平台 构建 ESP-IDF 组件

没有依赖项则处理一个依赖项:idf 版本

使用项目配置文件 sdkconfig

找到 Python 3.11.2,并确认其包含解释器组件。

添加链接脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值