Mbed OS启动问题

本人最近在学习Mbed OS设备上电后如何运行至main函数的过程,遇到了些问题,望了解知道的人多多指教,谢谢。

我使用的是gcc编译器,参考了mbed_boot.c文件中启动流程说明。

问题如下:

(1)_start中执行了什么操作,以及如何跳转mbed_boot.c文件下的software_init_hook函数。

(2)__libc_init_array函数干了什么操作。

上电:
1.执行复位中断函数Reset_Handler
 -->SystemInit函数:设置内核系统时钟和总线时钟
 -->_start
2.跳转mbed_boot.c文件下的software_init_hook函数
 -->mbed_set_stack_heap函数:设置mbed操作系统的堆栈空间
 -->mbed_cpy_nvic函数:复制向量中断表至RAM
 -->mbed_sdk_init函数:
 -->osKernelInitialize函数:初始化RTOS内核
      -->__svcKernelInitialize函数: 
      -->初始化osRtxInfo
      -->初始化内存池
      -->SVC_Initialize函数:初始化SVC和PendSV系统服务调用
 -->mbed_start_main函数:
      -->新建pre_main线程
      -->osKernelStart函数:启动RTOS内核调度程序
            -->__svcKernelStart函数:
            -->创建空闲线程osRtxIdleThread
            -->创建定时器线程osRtxTimerThread
            -->OS_Tick_Setup函数:设置RTOS时间滴答
            -->OS_Tick_Enable函数:使能RTOS时间滴答
            -->osRtxInfo切换到ready状态,优先级最高
3.pre_main线程
      -->__libc_init_array函数
      -->转到main函数
4.main