rt-thread启动流程分析(1)
2018-09-18 20:34阅读:
Rt-thread启动流程分析
SystemInit()
->_main()
->$Sub$$main()
->rtthread_startup()
->rt_hw_board_init();
-> rt_sy
stem_heap_init()
->
rt_components_board_init()
->
rt_console_set_device();
等等,今天主要分析rt_hw_board_init()函数的实现
void rt_hw_board_init(void)
{
HAL_Init();
//HAL库初始化
SystemClock_Config();//系统时钟初始化
#ifdef RT_USING_HEAP
rt_system_heap_init((void
*)HEAP_BEGIN, (void *)HEAP_END);
//系统堆内存初始化
#endif
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
//板级硬件初始化
#endif
#ifdef RT_USING_CONSOLE
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);·//设置控制太设备
#endif
}
有关系统堆内存初始化过程:
rt_components_board_init()函数分析:
该函数的实现时一个很好的使用C语言封装性的典型类似,实现低耦合高内聚的一个很好学习例子,具体的实现原理是,将所有需要初始化的板级外设函数的函数指针存放在某一个特定的section中,而这些初始化函数,则实在对应的.c文件中,并且是static函数,对外部不可见,然后在该函数中将所有该section中的函数指针轮训执行
将所有需要初始化的外设初始化函数,使用INIT_BOARD_EXPORT()该宏,
将函数指针存放在一个特定的段中,
在调用rt_components_board_init函数的时候,会一次调用rt_hw_pin_init()和rt_hw_usart_init()函数
rt_console_set_device()函数分析:
该函数实现设计rtt内核设备驱动实现,暂时还不太了解,下回分析。