新浪博客

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-thread启动流程分析(1) rt_components_board_init()函数分析:
该函数的实现时一个很好的使用C语言封装性的典型类似,实现低耦合高内聚的一个很好学习例子,具体的实现原理是,将所有需要初始化的板级外设函数的函数指针存放在某一个特定的section中,而这些初始化函数,则实在对应的.c文件中,并且是static函数,对外部不可见,然后在该函数中将所有该section中的函数指针轮训执行

将所有需要初始化的外设初始化函数,使用INIT_BOARD_EXPORT()该宏, 将函数指针存放在一个特定的段中,
rt-thread启动流程分析(1)

在调用rt_components_board_init函数的时候,会一次调用rt_hw_pin_init()rt_hw_usart_init()函数

rt_console_set_device()函数分析:
该函数实现设计rtt内核设备驱动实现,暂时还不太了解,下回分析。






我的更多文章

下载客户端阅读体验更佳

APP专享