#author("2019-11-04T11:05:12+08:00","default:Admin","Admin") RT-Thread

自动初始化机制是指初始化函数不需要被显式调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行。

例如在串口驱动中调用一个宏定义告知系统初始化需要调用的函数,代码如下:

&ref(): File not found: "RTT_example1.png" at page "+RTT+自动初始化机制";

示例代码最后的 INIT_BOARD_EXPORT(rt_hw_usart_init)表示使用自动初始化功能,按照这种方式,rt_hw_usart_init()函数就会被系统自动调用,那么它是在哪里被调用的呢?

流程框图中有两个函数:rt_components_board_init()与 rt_components_init(),其后的带底色方框内部的函数表示被自动初始化的函数,其中:

rt_components_board_init()函数执行的比较早,主要初始化相关硬件环境,执行这个函数时将会遍历通过 INIT_BOARD_EXPORT(fn) 申明的初始化函数表,并调用各个函数。

rt_components_init()函数会在操作系统运行起来之后创建的 main 线程里被调用执行,这个时候硬件环境和操作系统已经初始化完成,可以执行应用相关代码。

rt_components_init()函数会遍历通过剩下的其他几个宏申明的初始化函数表。 

  1. “board init functions”为所有通过 INIT_BOARD_EXPORT(fn) 申明的初始化函数。
  2. “pre-initialization functions”为所有通过 INIT_PREV_EXPORT(fn) 申明的初始化函数。
  3. “device init functions”为所有通过 INIT_DEVICE_EXPORT(fn) 申明的初始化函数。
  4. “components init functions”为所有通过 INIT_COMPONENT_EXPORT(fn) 申明的初始化函数。
  5. “enviroment init functions”为所有通过 INIT_ENV_EXPORT(fn) 申明的初始化函数。
  6. “application init functions”为所有通过 INIT_APP_EXPORT(fn) 申明的初始化函数。

&ref(): File not found: "RTT_初始化顺序.png" at page "+RTT+自动初始化机制";



iディレクトリで複数のポータルサイトにディレクトリ登録

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:35:44 (504d)