rtthread_startup()是 RT-Thread 初始化函数入口,上面介绍了可通过#ifdef RT_USING_USER_MAIN宏自动调用,也可以不启用该宏手工调用。 intrtthread_startup(void){rt_hw_interrupt_disable();/* board level initalization* NOTE: please initialize heap inside board initialization.*/rt_hw_board_init();/* ...
通过rt_components_board_init()和rt_components_init()函数,就完成了所有需要自动初始化函数的调用。 3、启动顺序 在日常使用中,功能的初始化是需要有先后循序的。根据上面的分析,RT-Thread 通过不同的宏完成顺序调用。 1.rt_components_board_init()函数较rt_components_init()先被调用,所以INIT_BOARD_EXPORT相...
在rt-thread内核代码中,初始化线程堆栈的时候其实是有一个宏声明进行选择的,具体代码如下: #ifdef ARCH_CPU_STACK_GROWS_UPWARD thread->sp = (void *)rt_hw_stack_init(thread->entry, thread->parameter, (void *)((char *)thread->stack_addr), (void *)_thread_exit); #else thread->sp = (void...
rt_thread_startup(&led_thread); } } 上述代码很简单,就是在main()函数中对LED的GPIO进行初始化,也就是调用了LED_GPIO_Config() 函数,而针对RT-Thread系统,我们在需要初始化的地方进行初始化即可,无需在main()函数或者board.c中初始化了。 2 RT-Thread初始化流程 要想搞清楚RT-Thread的自动初始化流程,那...
摘要:rt-thread 有一个机制是在main函数在运行已经将外设和组件自动用宏INIT_EXPORT(fn, level)初始化外设,接下来就要分析一下原理并模仿这种自动化初始化机制自己实现。 实现原理:1.将初始化函数注册到自定义的段中,然后分层级自动初始化设备 2.$sub$$main $supur$$main 在main运行之前实现自动初始。
rt_components_init()函数是在系统启动后,在main线程里面被调用执行,这个函数是用来初始化其他用 INIT_XXX_EXPORT(fn)声明的函数列表的。 目前RT-Thread内核里面,用来实现自动初始化功能的宏定义接口,如下图所示。 综上所述,要使用RT-Thread的自动初始化流程,可以概括为以下如图所示的步骤。
我抠了一张RT-Thread官网文档的图,该图是RT-Thread代码的启动流程图,该图中的蓝色方框部分就是自动初始化的6个等级以及初始化的先后顺序。从图中可以看出这6部分的初始化是由函数 rt_components_board_init() 与 rt_components_init() 完成的。 在一开始的例子中, INIT_APP_EXPORT(led_init) 就位于最后一个...
rt_components_init()函数是在系统启动后,在main线程里面被调用执行,这个函数是用来初始化其他用 INIT_XXX_EXPORT(fn)声明的函数列表的。 目前RT-Thread内核里面,用来实现自动初始化功能的宏定义接口,如下图所示。 综上所述,要使用RT-Thread的自动初始化流程,可以概括为以下如图所示的步骤。
通过源码的学习,了解一下程序初始化过程。 1)首先在main函数内调用了 rtthread_startup() 函数; 2)在void rtthread_startup(void)内调用了 rt_hw_board_init() 函数; 3)在 rt_hw_board_init() 函数内调用 rt_components_board_init(); void rt_components_board_init(void) ...