2.ESP32及arduino理论知识

一、ESP32,是如何运行RTOS的?

参考文档 general-notes.rst

1、 第一阶段bootloader(ROM中)加载第二阶段bootloader(位于FLASH 0X1000)

2、 第二阶段的boot loader加载分区表和MAIN APP应用程序(其实就是freertos了)

main APP包含RAM段和Flash段

① 去0X8000加载分区表 ,配置两个CPU(PRO CPU和APP CPU)的MMU,但只使能PRO cpu的flash,一旦被加载,就会跳到main APP的入口

3、执行main APP,此时,第二个CPU和RTOS调度器都会运行

入口调用 componments/esp32/cpu_start.c中的call_start_cpu0函数,

此函数会调用 call_start_cpu1.执行后PRO CPU执行start_cpu0,APP CPU执行start_cpu1

最终会调用app_main函数

二、内存分布


内存分为:

1、IRAM:

Internal SRAM0

ISR。Handlers 中断处理函数必须放到IRAM里 (方法:通过家IRAM——ATTR属性就能把代码或变量放入IRAM里)

一些时序比较高的也应该放入IRAM里

2、IROM:

3、DRAM:

4、DROM:

三、启动流程


1、地址映射


①、首先在0XE000下载了:bootapp0


②、其次在0X1000下载了:bootloader


等待下载完成,后继续进程如下:


③、在0X10000下载了:应用程序(RTOS)


④、在0X8000下载了:分区表 default


这个文件是由default.csv表格生成的,打开表格可以发现分区和地址的关系。


知道了分区表其实我们也可以借助别的工具下载程序了,例如


四、setup()和loop()函数


首先,我们要知道系统会默认编译cores文件夹下的内容(相当于系统自带的库函数)


其次,我们要知道 PRO CPU在运行应用程序之前先运行了app_main函数,
其实这个函数就在cores文件夹下的main.cpp里面



再次,我们要知道,除了cores和librarise下的文件,其他文件都被放入.a库文件中 lib库中


有了以上知识后,我们看程序可以知道


app_main()调用了loopTask


loopTask会先调用setup函数,再调用loop函数

loop函数会一直死循环,所以我们可以在setup里创建任务,

五、如何在第二个核上创建任务


使用xTaskCreatePinnedToCore(loopTask, "loopTask", 8192, NULL, 1, NULL, ARDUINO_RUNNING_CORE);

最后一个参数里 传0代表第一个核,1代表第二个核
————————————————
链接:https://blog.csdn.net/finedayforu/article/details/108465028

 


评论:
相关文章
【ESP32 C++教程】Unit9-2:文件系统应用

本小节是一个Web服务结合SD卡文件系统的应用示例。


【ESP32 C++教程】Unit9-1:文件系统

本节主要讲解FileSystem类的使用,以及Flash文件系统配置和SD存储模块的使用。


【ESP32 C++教程】Unit8-2:Wifi热点和网页上控制设备

本节主要讲解Wifi热点的Web服务使用,以及使用网页交互来控制LED。


【ESP32 C++教程】Unit8-1:WiFi连接和HTTP请求

本节主要讲解WifiBoard类的功能和HTTPClient库及cJSON的使用。


【ESP32 C++教程】Unit7-3:TFT-LCD显示屏

本节主要讲解TFT-LCD显示屏的使用和Window派生类与TFT_eSPI库的使用。


基于STEAM教育和设计思维的初中化学跨学科实践活动——基于血氧指标控制的简易供氧器设计与制作

这篇文章展示了如何将化学与工程、信息技术、现代制造技术紧密结合,以“血氧指标控制的简易供氧器”为载体,组织一次真实的跨学科项目。设计中突出“从需求出发”“闭环控制”“可视化反馈”,不仅呼应了新课标中“跨学科实践”的要求,更贴近生活实际需求,尤其适用于对科技应用、健康关怀有兴趣的学生群体,可作为项目式学习或社团活动的优质课例。


【ESP32 C++教程】Unit7-2:OLED显示屏

本节主要讲解OLED显示屏的使用和Display类及派生类的介绍及使用。


【ESP32 C++教程】Unit7-1:四位7段式数码管

本节主要讲解用TM1650来驱动四位7段式数码管模块的显示使用。


【ESP32 C++教程】Unit6-4:资源互斥访问

本节主要讲解FreeRTOS任务间如何使用互斥对象来实现资源互斥访问。


ESP32 Guru Meditation Error报错定位分析

在ESP32的开发,经常会有系统崩溃一直重启的情况,那么如何快速定位出现异常的代码呢?

玩转 ESP32 + Arduino

作者:finedayforu@CSDN   共24讲

玩转 ESP32 + Arduino