7.7. INIT_CALL
Overview 提供init_call接口应用示例、常用相关 API 介绍和常见问题。
7.7.1. 应用示例
示例演示:
各种init_call在系统内部调用顺序
example: 进入 apps/demo/demo_DevKitBoard/include/demo_config.h
,中开启宏 USE_INIT_CALL_TEST_DEMO
。
Note
init_call都是初始化,只不过有顺序之分,它们的顺序排列如下图:
7.7.2. 常见问题
init_call注册的函数什么时候运行,在哪里运行
答:在app_core任务 app_task_handler 入口顺序执行
什么情况下使用init_call
答:如果想隐式调用一个功能模块的初始化,可以使用init_call.类似于C++的构造函数
init_call 顺序问题
答: 因为同一类型init_call是无法区分顺序, 增加多种init_call是为了某些init_call需要依赖某些模块先初始化
init_call仅仅为初始化,禁止在initcall函数程序代码中进行while死循环和长时间延时
7.7.3. API Reference
Defines
-
__initcall(fn)
-
early_initcall(fn)
-
late_initcall(fn)
-
platform_initcall(fn)
-
module_initcall(fn)
-
__do_initcall(prefix)
Typedefs
-
typedef int (*initcall_t)(void)