当前位置: 代码迷 >> 综合 >> ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识
  详细解决方案

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

热度:47   发布时间:2023-09-12 10:32:01.0

arduino基础知识请见:
①: https://blog.csdn.net/dpjcn1990/article/details/92831300
②: https://blog.csdn.net/dpjcn1990/article/details/92831334
③: https://blog.csdn.net/dpjcn1990/article/details/92831364


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、地址映射

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

四、setup()和loop()函数

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

其次,我们要知道 PRO CPU在运行应用程序之前先运行了app_main函数,

其实这个函数就在cores文件夹下的main.cpp里面

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

app_main()调用了loopTask

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

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

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

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

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

最后一个参数里 传0代表第一个核,1代表第二个核


相关文章

ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

玩转 ESP32 + Arduino (三) GPIO和串口

玩转 ESP32 Arduino (三) GPIO和串口 finedayforu 2020-08-29 00:58:26 317 收藏 4 文章标签&#xff1a; 字符串 java stream 串口通信 python 最后发布:2020-08-29 00:58:26首次发布:2020-08-29 00:58:26版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循<a hr…
阅读更多...
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

ESP32:windows+vscode+idf开发环境搭建

Visual Studio Code大家可以在微软的官网上根据自身的开发平台下载&#xff0c;下载地址如下所示: Visual Studio Code下载地址 开发框架esp-idf 乐鑫的esp-idf包均放在Github上 (尽可能地选择release版本,不要选择尝鲜版本)&#xff0c;具体下载地址如下所示: esp32 esp-idf开…
阅读更多...
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

uboot:make xxx_config/xxx_deconfig的命令解析

make jz2440_defconfig分析&#xff1a; %config: scripts_basic outputmakefile FORCE $ (Q)$(CONFIG_SHELL) $(srctree)/scripts/multiconfig.sh $ scripts_basic&#xff1a; PHONY scripts_basic scripts_basic&#xff1a; $ (Q) $(MAKE) $(build)scripts/basic $(Q)r…
阅读更多...
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

apt-get:E: 无法打开锁文件 /var/lib/dpkg/lock-frontend - open

在使用apt-get安装程序的时候报&#xff1a; E: 无法打开锁文件 /var/lib/dpkg/lock-frontend - open (2: 没有那个文件或目录) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root? 然后&#xff0c;使用sudo apt-get update的时候报…
阅读更多...
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

linux驱动笔记(5):导出符号

EXPORT_SYMBOL(符号名); EXPORT_SYMBOL_GPL(符号名); 导出的符号将可以被其他模块使用&#xff0c;使用前声明一下即可。EXPORT_SYMBOL_GPL()只适 用于包含GPL 许可权的模块。代码清单4.5 给出了一个导出整数加、减运算函数符号的内核模块的例子&#xff08;这些导出符号毫无…
阅读更多...
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

linux驱动笔记(五):异步通知

一、应用程序对异步通知的处理包括以下三步&#xff1a; 1、注册信号处理函数 应用程序根据驱动程序所使用的信号来设置信号的处理函数&#xff0c;应用程序使用 signal 函数来 置信号的处理函数。 sighandler_t signal(int signum, sighandler_t handler)); 第一个参数指定信…
阅读更多...
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

linux驱动笔记(六):虚拟总线platform

设备&#xff08;硬件部分&#xff09;&#xff1a;中断号&#xff0c;寄存器&#xff0c;DMA等 驱动&#xff08;软件部分&#xff09;platform_device 结构体platform_driver 结构体 struct platform_device { const char *name; 名字 int id; …
阅读更多...
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

uboot-2012.04.01配置与编译分析(一)

前言&#xff1a;只是记笔记&#xff0c;没想到分析了这么多&#xff0c;如果有错请各位大佬指出来。 由于需要移植uboot-2012.04.01到JZ2440开发板&#xff0c;所以先下载了uboot-2012.04.01进行配置与编译分析。 一、编译步骤 一般情况下下载一个uboot之后解压&#xff0c;进…
阅读更多...
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

Linux系统LCD驱动架构分析

我们一起来看一个Linux系统中最重要的输出系统的驱动架构—LCD驱动。在Linux中&#xff0c;LCD驱动采用了帧缓冲(FrameBuffer)技术&#xff0c;所以LCD驱动又叫FrameBuffer驱动。在很多地方&#xff0c;这两种叫法是通用的。本文章的核心内容就是搞清楚FrameBuffer的程序架构&a…
阅读更多...
ESP32 + Arduino笔记:(二)ESP32启动分析及arduino理论知识

Linux驱动笔记(八): DM9000网卡驱动

DM9000硬件连接分析 s3c2440与DM9000的连接关系如下&#xff1a; 从上图可得出下面几个关键点&#xff1a; 1.中断线与GPF7相连&#xff0c;对应IRQ_EINT7 2.片选与nGCS4相连&#xff0c;基地址对应0x2000_0000 3.CMD线与地址线ADDR2相连&#xff0c;意味着要使CMD高电平&…
阅读更多...