RT-Thread 的自动初始化机制使用了自定义 RTI 符号段,将需要在启动时进行初始化的函数指针放到了该段中,形成一张初始化函数表,在系统启动过程中会遍历该表,并调用表中的函数,达到自动初始化的目的。 用来实现自动初始化功能的宏接口定义详细描述如下表所示: 初始化函数主动通过这些宏接口进行申明,如 INIT_BOARD...
RT-Thread的自动初始化机制使用了自定义 RTI符号段,将需要在启动时进行初始化的函数指针放到了该段中,形成一张初始化函数表,在系统启动过程中会遍历该表,并调用表中的函数,达到自动初始化的目的。 自动初始化功能的宏接口定义详细描述如下表所示: 初始化函数主动通过这些宏接口进行申明,如 INIT_BOARD_EXPORT(rt_hw...
ZI-data:0数据段,存放未初始化的全局变量,及初始化为0的变量 RT-thread的自动初始化机制 初始化函数不需要被显示调用,只需要在函数定义处使用宏定义方式声明,就会在系统使用过程中被执行。 自动初始化接口 INIT_BOARD_EXPORT(fn) 非常早期的初始化,此时调度器还未启动 INIT_PREV_EXPORT(fn) 主要是用于纯软件的...
id=rt-thread-自动初始化机制),根据官方文档的讲述在 RTT 源码中一共使用了 6 中顺序的初始化,本文以其中的一个 INIT_APP_EXPORT(fn) 为例进行自动初始化的原理分析,其他顺序的初始化的原理与之一致。
如上图所示,通过对源码的跟踪发现,这些INIT_XXX_EXPORT的宏定义,最终都是调用了INIT_EXPORT这个宏定义,而这个宏定义,就是把该初始化函数放在自定义的rti_fn符号段里面,源码在rtdef.h头文件里面,如下图所示。 把初始化函数放到自定义的符号段里面,有什么作用呢?答案就是,可以通过这种方式,让这些初始化函数被隐式...
这样,使用一个宏,初始化函数就会被自动初始化,不用在其他地方显式调用 led_init() 。代码瞬间清爽很多。 二、引入 当然也不用担心一个初始化必须在另一个初始化之前的问题,因为这里有6个自动初始化等级可供选择。 我抠了一张RT-Thread官网文档的图,该图是RT-Thread代码的启动流程图,该图中的蓝色方框部分就是...
RT-Thread自动初始化机制是指初始化函数不需要被显式调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行,非常的方便。 1 普通初始化 前面也讲了,我们在写单片机的程序时,需要对硬件进行初始化操作,我们这里还是以LED为例。需要对LED的GPIO进行初始化后才能进一步操作。 int main(void) ...
从上面的分析可以看出,使用符号段的方式来存放初始化函数,好处就是当我需要添加某一个初始化函数的时候,就不需要再去改动RT-Thread的启动代码了,直接通过section关键字,把初始化函数添加到相应的符号段即可。 以上就是RT-Thread的自动初始化机制分析,正是由于采用了这种机制,所以,当我们对内核或组件进行裁剪的时候,...
RT-thread 用宏进行自动初始化 摘要:rt-thread 有一个机制是在main函数在运行已经将外设和组件自动用宏INIT_EXPORT(fn, level)初始化外设,接下来就要分析一下原理并模仿这种自动化初始化机制自己实现。 实现原理:1.将初始化函数注册到自定义的段中,然后分层级自动初始化设备...
rt_components_init()函数是在系统启动后,在main线程里面被调用执行,这个函数是用来初始化其他用 INIT_XXX_EXPORT(fn)声明的函数列表的。 目前RT-Thread内核里面,用来实现自动初始化功能的宏定义接口,如下图所示。 综上所述,要使用RT-Thread的自动初始化流程,可以概括为以下如图所示的步骤。