RT-Thread 2 - 启动流程
RT-Thread 官网有这样一张图,详细讲解了OS启动流程。
1. 在MDK环境下,上电复位后进入复位中断,并调用 __main 函数;
2. RT-Thread重定义了 $Sub$$main 函数,因此复位中断先跳转到 $Sub$$main 函数;
3. $Sub$$main 函数调用 rtthread_startup() 函数,完成OS启动流程。并在 rt_application_init() 函数中创建 main 线程 void main_thread_entry(void *parameter);
4. rtthread_startup() 函数最后启动调度器,OS随后进入已经创建的 main 线程(void main_thread_entry(void *parameter));
5. main 线程完成 OS组件初始化之后,跳转至 $Super$$main() 函数,正式执行用户定义的 main 函数。因此 main 函数是以一个线程的形式在运行。
注:有关 $Super$$和$Sub$$ 的用法和参考 Arm Compiler for Embedded Reference Guide。
1 /* the system main thread */ 2 void main_thread_entry(void *parameter) 3 { 4 extern int main(void); 5 extern int $Super$$main(void); 6 7 #ifdef RT_USING_COMPONENTS_INIT 8 /* RT-Thread components initialization */ 9 rt_components_init(); 10 #endif 11 /* invoke system main function */ 12 #if defined(__CC_ARM) || defined(__CLANG_ARM) 13 $Super$$main(); /* for ARMCC. */ 14 #elif defined(__ICCARM__) || defined(__GNUC__) 15 main(); 16 #endif 17 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律