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)