在日常使用中,功能的初始化是需要有先后循序的。根据上面的分析,RT-Thread 通过不同的宏完成顺序调用。 1.rt_components_board_init()函数较rt_components_init()先被调用,所以INIT_BOARD_EXPORT相关的 BOARD 板级资源初始化优先被调用了,主要用于初始化相关的硬件环境,此时调度器尚未启动。 2.rt_components_init(...
RT-Thread的自动初始化功能允许开发者在不需要显式调用初始化函数的情况下,在系统启动时自动执行这些初始化函数。这种机制极大地简化了初始化过程,使得代码更加清晰和易于维护。 RT-Thread自动初始化的工作原理 RT-Thread通过自定义的RTI符号段(RT Initialization)来实现自动初始化。具体工作原理如下: 宏定义与段划分: ...
rt_thread_startup(&led_thread); } } 上述代码很简单,就是在main()函数中对LED的GPIO进行初始化,也就是调用了LED_GPIO_Config() 函数,而针对RT-Thread系统,我们在需要初始化的地方进行初始化即可,无需在main()函数或者board.c中初始化了。 2 RT-Thread初始化流程 要想搞清楚RT-Thread的自动初始化流程,那...
这样,使用一个宏,初始化函数就会被自动初始化,不用在其他地方显式调用 led_init() 。代码瞬间清爽很多。 二、引入 当然也不用担心一个初始化必须在另一个初始化之前的问题,因为这里有6个自动初始化等级可供选择。 我抠了一张RT-Thread官网文档的图,该图是RT-Thread代码的启动流程图,该图中的蓝色方框部分就是...
这样,使用一个宏,初始化函数就会被自动初始化,不用在其他地方显式调用 led_init() 。代码瞬间清爽很多。 二、引入 当然也不用担心一个初始化必须在另一个初始化之前的问题,因为这里有6个自动初始化等级可供选择。 我抠了一张RT-Thread官网文档的图,该图是RT-Thread代码的启动流程图,该图中的蓝色方框部分就是...
rt_components_init() 函数会遍历通过剩下的其他几个宏申明的初始化函数表。 RT-Thread的自动初始化机制使用了自定义 RTI符号段,将需要在启动时进行初始化的函数指针放到了该段中,形成一张初始化函数表,在系统启动过程中会遍历该表,并调用表中的函数,达到自动初始化的目的。 自动初始化功能的宏接口定义详细描述...
RT-Thread 的自动初始化机制通过巧妙的宏定义方式实现。在函数定义处使用特定的宏声明初始化函数,这些函数会在系统启动过程中自动被执行,无需手动调用。 INIT_BOARD_EXPORT 主要用于非常早期的初始化,例如芯片相关硬件的初始化,此时调度器还未启动。它适用于那些在系统启动极早期就必须完成的关键硬件初始化操作。
蒙蒙plus创建的收藏夹蒙蒙plus内容:rtthread自动初始化流程,如果您对当前收藏夹内容感兴趣点击“收藏”可转入个人收藏夹方便浏览
目前RT-Thread内核里面,用来实现自动初始化功能的宏定义接口,如下图所示。 综上所述,要使用RT-Thread的自动初始化流程,可以概括为以下如图所示的步骤。 为什么初始化函数加入了符号段之后,就可以被自动调用?符号段是什么?使用这种方式有什么好处? 把函数加入符号段,其实就是使用了MDK编译器的__attribute__((section...