sdk - 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?
解决方案
ESP32 ESP-IDF SDK 启动过程在应用程序启动流程-应用程序启动中有相当详尽的描述。ESP8266 RTOS SDK 启动类似。
ESP-IDF 应用程序入口点
call_start_cpu0
位于 components/esp_system/port/cpu_start.c中的函数。此函数由第二阶段引导加载程序执行,并且永远不会返回。. . . <跳过> 。. .
一旦完成运行,它会调用components/esp_system/startup.c中
call_start_cpu0
的“系统层”初始化函数。其他内核也将完成端口层初始化并在同一文件中找到调用。start_cpu0
start_other_cores
. . . <跳过> 。. .
主要的系统初始化函数是
start_cpu0
. 默认情况下,此函数与函数 弱链接start_cpu0_default
。这意味着可以覆盖此函数以添加一些额外的初始化步骤。. . . <跳过> 。. .
初始化所有其他组件后,创建主任务并开始运行 FreeRTOS 调度程序。
在完成更多初始化任务(需要启动调度程序)之后,主任务运行
app_main
固件中应用程序提供的功能。
最近对最后一部分进行了重构。这app_main
是旧 IDF-SDK v4.2 中调用的链接。
推荐阅读
- python - Python 循环辅助
- c# - 在 C# 中以索引方式合并/复制数组的有效方法
- python - 为什么我的表格内容为空白,无法设置数据?
- javascript - 如何自定义 highchart 树图数据标签?
- c# - EF Core 3 Scaffolding(数据库优先)不生成主键 Fluent API
- php - 如何在开发模式下启用缓存?
- python - 检测 HTML 文件中的白色文本
- active-directory - 为什么 hbase shell 中的 whoami 命令无法获取组信息?
- node.js - 尝试将节点 js 与 mongoDB Atlas 云连接时出现 UnhandledPromiseRejectionWarning 错误
- javascript - 通过 jQuery 动态添加 HTML 元素后的额外点击