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 }
posted @ 2022-04-26 22:36  Ivan0512  阅读(121)  评论(0编辑  收藏  举报