【STM32F4】【银杏科技ARM+FPGA】iCore3移植RT-Thread--启动过程
通过前面的制作BSP工程进行程序下载发现,RTT的启动是神速的,那么具体的过程是怎么样的呢?
一、SystemInit()
和裸机启动一样,第一步仍是先进行系统初始化,调用SystemInit()函数来完成CPU的设置以及向量表位置的配置。
二、$Sub$$main()
完成系统初始化后,就进入真的main函数开始系统启动,该函数在内核components.c文件中。那么$Sub$$main()函数到底是什么意思呢,我们在.s文件中可以看到,系统完成systeminit之后,就开始执行main函数,其实$Sub$$main()就是在主程序main前插入一段新代码,这段代码可以用来初始化系统,当然也可以做其他事情。在这里我们可以看到,调用了rtthread_startup()函数开始RTT系统启动。
三、rtthread_startup()
进入这个函数后就开始进行了真正的系统启动,我们可以看到rtthread_startup()共调用了这么多函数。
下面我给大家简单介绍一下这些函数具体做了哪些工作来完成整个系统启动的。
3.1 rt_hw_interrupt_disable()
该函数的功能就是关闭所有的中断。
3.2 rt_hw_board_init()
该函数的功能是进行板级初始化。使能ICache DCache,进行HAL初始化完成中断优化级配置、SYSTICK滴答定时器的配置,RTT操作系统堆初始化,GPIO时钟使能,UART设备初始化,选择作为终端输出的串口设备,最后进行板底层初始化。
3.3 rt_show_version()
该函数的功能是通过串口向终端输出RT-Thread操作系统的版本信息,就是我们在DAY1和DAY2中看到的信息。
3.4 rt_system_timer_init()
该函数的功能是完成系统定时器的初始化。
3.5 rt_system_scheduler_init()
该函数将初始化系统调度程序。
3.6 rt_application_init()
该函数的功能是创建main线程,并启动该线程,该线程默认优先级为10。
3.7 rt_system_timer_thread_init()
该函数的功能是创建定时器线程,并启动该线程,该线程的优先级最高,为0。
3.8 rt_thread_idle_init()
该函数的功能是创建空闲线程,并启动该线程,该线程的优化级最低。
3.9 rt_system_scheduler_start()
至此系统启动完毕。