玩轉(zhuǎn) ESP32 + Arduino (二) ESP32及arduino理論知識(shí)

arduino基礎(chǔ)知識(shí)請(qǐng)見:
①: 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理論知識(shí)

一、ESP32,是如何運(yùn)行RTOS的?

參考文檔 general-notes.rst

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

2、 第二階段的boot loader加載分區(qū)表和MAIN APP應(yīng)用程序(其實(shí)就是freertos了)

main APP包含RAM段和Flash段

① 去0X8000加載分區(qū)表 ,配置兩個(gè)CPU(PRO CPU和APP CPU)的MMU,但只使能PRO cpu的flash,一旦被加載,就會(huì)跳到main APP的入口

3、執(zhí)行main APP,此時(shí),第二個(gè)CPU和RTOS調(diào)度器都會(huì)運(yùn)行

入口調(diào)用 componments/esp32/cpu_start.c中的call_start_cpu0函數(shù),

此函數(shù)會(huì)調(diào)用 call_start_cpu1.執(zhí)行后PRO CPU執(zhí)行start_cpu0,APP CPU執(zhí)行start_cpu1

最終會(huì)調(diào)用app_main函數(shù)

二、內(nèi)存分布

內(nèi)存分為:

1、IRAM:

Internal SRAM0

ISR。Handlers 中斷處理函數(shù)必須放到IRAM里 (方法:通過家IRAM——ATTR屬性就能把代碼或變量放入IRAM里)

一些時(shí)序比較高的也應(yīng)該放入IRAM里

2、IROM:

3、DRAM:

4、DROM:

三、啟動(dòng)流程

1、地址映射

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

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

等待下載完成,后繼續(xù)進(jìn)程如下:

③、在0X10000下載了:應(yīng)用程序(RTOS)

④、在0X8000下載了:分區(qū)表 default

這個(gè)文件是由default.csv表格生成的,打開表格可以發(fā)現(xiàn)分區(qū)和地址的關(guān)系。

知道了分區(qū)表其實(shí)我們也可以借助別的工具下載程序了,例如

四、setup()和loop()函數(shù)

首先,我們要知道系統(tǒng)會(huì)默認(rèn)編譯cores文件夾下的內(nèi)容(相當(dāng)于系統(tǒng)自帶的庫函數(shù))

其次,我們要知道 PRO CPU在運(yùn)行應(yīng)用程序之前先運(yùn)行了app_main函數(shù),

其實(shí)這個(gè)函數(shù)就在cores文件夾下的main.cpp里面

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

有了以上知識(shí)后,我們看程序可以知道

app_main()調(diào)用了loopTask

loopTask會(huì)先調(diào)用setup函數(shù),再調(diào)用loop函數(shù)

loop函數(shù)會(huì)一直死循環(huán),所以我們可以在setup里創(chuàng)建任務(wù),

五、如何在第二個(gè)核上創(chuàng)建任務(wù)

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

最后一個(gè)參數(shù)里 傳0代表第一個(gè)核,1代表第二個(gè)核


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容