文章目录
[+]
RT-Thread 启动流程是指 RT-Thread 操作系统从上电到运行用户程序的过程,它涉及到汇编代码、C 代码和内核对象的初始化和调度
汇编代码部分:系统上电后,首先进入汇编代码 startup_stm32f103xe.s 这个文件,这个文件紧张卖力对芯片进行必要的初始化,如时钟、中断向量表等,然后跳转到用户 flash 区域运行用户代码。用户 flash 区域的第一个地址是栈起始地址,第二个地址是复位向量地址,系统会自动加载这两个地址到 MSP 和 PC 寄存器,并实行复位向量地址指向的函数。这个函数会调用 SystemInit 函数和 __main 函数,前者完成一些硬件干系的初始化,后者完成一些 C 措辞干系的初始化,如清零 BSS 段、拷贝 DATA 段等。C 代码部分:汇编代码部分实行完毕后,系统会进入 C 代码部分,也便是 $Sub$$main 函数。这个函数是 RT-Thread 对 main 函数的一个补丁,它会先关闭所有中断,然后调用 rtthread_startup 函数。这个函数是 RT-Thread 的核心启动函数,它会依次完成以下几个步骤12:调用 rt_system_heap_init 函数,初始化系统内存堆。调用 rt_system_scheduler_init 函数,初始化系统调度器。调用 rt_system_timer_init 函数,初始化系统定时器。调用 rt_system_timer_thread_init 函数,初始化系统定时器线程。调用 rt_thread_idle_init 函数,初始化系统空闲线程。调用 rt_application_init 函数,创建用户主线程,并设置其入口函数为 $Super$$main 函数。调用 rt_system_scheduler_start 函数,启动系统调度器,并切换到优先级最高的就绪线程实行。用户主线程部分:当系统调度器切换到用户主线程时,它会实行 $Super$$main 函数。这个函数是 RT-Thread 对 main 函数的另一个补丁,它会先打开所有中断,然后调用用户自己定义的 main 函数。在 main 函数中,用户可以根据自己的需求进行各种操作和配置。
(图片来自网络侵删)