首页 > 解决方案 > RTOS SDK app_main 在哪里定义为启动函数?

问题描述

使用 rtos SDK 我能够成功开发和运行一些简单的示例,但我需要了解。

通常 ac / c++ 程序以 main(...) 开头(我不记得确切的签名)

RTOS 项目似乎几乎都从 app_main() 开始,一些在线示例使用 user_init()

对所有来源的文本搜索对我没有帮助。似乎有一个 startup.c 反过来调用 app_main 但这并不能解释为什么其他一些示例(https://github.com/espressif/esp8266-rtos-sample-code/blob/master/03Wifi/Soft_AP_DEMO/ user/user_main.c我没有尝试)有另一个入口点。

有人可以解释它的结构吗?“谁”在调用 app_main?

标签: sdkesp8266esp32rtos

解决方案


ESP32 ESP-IDF SDK 启动过程在应用程序启动流程-应用程序启动中有相当详尽的描述。ESP8266 RTOS SDK 启动类似。

ESP-IDF 应用程序入口点call_start_cpu0位于 components/esp_system/port/cpu_start.c中的函数。此函数由第二阶段引导加载程序执行,并且永远不会返回。

. . . <跳过> 。. .

一旦完成运行,它会调用components/esp_system/startup.ccall_start_cpu0的“系统层”初始化函数。其他内核也将完成端口层初始化并在同一文件中找到调用。start_cpu0start_other_cores

. . . <跳过> 。. .

主要的系统初始化函数是 start_cpu0. 默认情况下,此函数与函数 弱链接 start_cpu0_default。这意味着可以覆盖此函数以添加一些额外的初始化步骤。

. . . <跳过> 。. .

初始化所有其他组件后,创建主任务并开始运行 FreeRTOS 调度程序。

在完成更多初始化任务(需要启动调度程序)之后,主任务运行 app_main固件中应用程序提供的功能。

最近对最后一部分进行了重构。app_main是旧 IDF-SDK v4.2 中调用的链接。


推荐阅读