hdogs
REG_CLR_BIT(TIMG_WDTCONFIG0_REG(0), TIMG_WDT_FLASHBOOT_MOD_EN_S);
REG_CLR_BIT(RTC_CNTL_WDTCONFIG0_REG, RTC_CNTL_WDT_FLASHBOOT_MOD_EN);
#if !CONFIG_FREERTOS_UNICORE
// Wait for FreeRTOS initialization to finish on APP CPU, before replacing its startup stack
while (port_xSchedulerRunning[1] == 0) {
;
}
#endif
//Enable allocation in region where the startup stacks were located.
heap_caps_enable_nonos_stack_heaps();
app_main();
vTaskDelete(NULL);
}
可以看到,其主要任务是关闭看门狗,并调用app_main函数(即用户二次开发时的主函数入口),因为main_task中没有循环,在app_main执行后,vTaskDelet函数就将这个任务删除了。
下面说一下,关于esp32的开发,在开发这种Wi-Fi cpu时 。因为非arm芯片,官方也没有提供详细的寄存器配置文档,虽然寄存器和引脚功能都在esp-idf中以英文注释给出来了,但是esp开头的api基本都是以链接库方式提供的,你是看不到它的实现方式,所以比较合理快捷的开发方式,由于官方给出的esp-idf中自带FreeRTOS操作系统,且官方文档中给出来相关函数的API手册中,已经将相关应用需要用到的API函数接口给出的比较详细了,且esp-idf中对于相关的应用给出了大量的示例(esp-idf/examples),所以对于esp32学习来说,我觉得比较好的学习方法是:
对于没有嵌入式操作系统基础的人来说,最好是先学习下FreeRTOS的操作系统,重点学习相关队列及任务调度部分的应用,如果有过操作系统的学习和应用,但是使用的并不是FreeRTOS而是ucos之类的操作系统,那么建议看下FreeRTOS的API手册就可以开始进行开发了。对于esp32部分,这里建议学习下官方提供的例程,学习自己需要用到功能部分的API的调用和使用方法,并以此学习相关功能的应用方法,(这一部分将是我后面文章的重点部分)最终完成产品的相关设计。
|