Init Framework API Reference¶
This section documents the Initialization Framework API.
概述¶
The Nexus Init Framework provides a compile-time automatic initialization system similar to Linux initcall. Initialization functions are registered at compile time using linker sections and executed in level order at system startup.
初始化 Levels¶
The framework defines six initialization levels that execute in order:
BOARD - Board-level initialization (clock, power)
PREV - Pre-initialization (memory, debug)
BSP - BSP initialization (peripheral configuration)
DRIVER - Driver initialization
COMPONENT - Component initialization (middleware)
APP - Application initialization
Core Functions¶
-
nx_status_t nx_init_run(void)¶
Execute all registered initialization functions.
This function iterates through all registered initialization functions in level order and executes them. If a function returns non-zero, the error is recorded but execution continues with remaining functions.
- 返回:
NX_OK if all succeeded, NX_ERR_GENERIC if any failed
-
nx_status_t nx_init_get_stats(nx_init_stats_t *stats)¶
Get initialization statistics.
Returns statistics about initialization execution including total count, success count, failure count, and last error.
- 参数:
stats -- [out] Pointer to statistics structure
- 返回:
NX_OK on success, NX_ERR_NULL_PTR if stats is NULL
-
bool nx_init_is_complete(void)¶
Check if all initializations completed successfully.
This function checks if all initialization functions executed successfully (no failures recorded).
- 返回:
true if all succeeded, false if any failed
类型 Definitions¶
-
typedef int (*nx_init_fn_t)(void)¶
Initialization function type.
- 返回:
0 on success, non-zero error code on failure
-
enum nx_init_level_t¶
Initialization level enumeration.
Defines the order in which initialization functions are executed. Lower levels execute before higher levels. Level 0 and 7 are reserved for internal boundary markers.
Values:
-
enumerator NX_INIT_LEVEL_BOARD¶
Board-level init (clock, power)
-
enumerator NX_INIT_LEVEL_PREV¶
Pre-initialization (memory, debug)
-
enumerator NX_INIT_LEVEL_BSP¶
BSP initialization (peripheral config)
-
enumerator NX_INIT_LEVEL_DRIVER¶
Driver initialization
-
enumerator NX_INIT_LEVEL_COMPONENT¶
Component init (middleware)
-
enumerator NX_INIT_LEVEL_APP¶
Application initialization
-
enumerator NX_INIT_LEVEL_MAX¶
Maximum level (boundary marker)
-
enumerator NX_INIT_LEVEL_BOARD¶
-
struct nx_init_stats_s¶
Initialization statistics structure.
Export Macros¶
Use these macros to register initialization functions at compile time:
-
NX_INIT_BOARD_EXPORT(fn)¶
Export board-level initialization function.
Board-level initialization runs first (level 1). Use for clock configuration, power management, etc.
- 参数:
fn -- [in] Function pointer
-
NX_INIT_PREV_EXPORT(fn)¶
Export pre-initialization function.
Pre-initialization runs at level 2. Use for memory initialization, debug setup, etc.
- 参数:
fn -- [in] Function pointer
-
NX_INIT_BSP_EXPORT(fn)¶
Export BSP initialization function.
BSP initialization runs at level 3. Use for peripheral configuration, pin muxing, etc.
- 参数:
fn -- [in] Function pointer
-
NX_INIT_DRIVER_EXPORT(fn)¶
Export driver initialization function.
Driver initialization runs at level 4. Use for device driver initialization.
- 参数:
fn -- [in] Function pointer
-
NX_INIT_COMPONENT_EXPORT(fn)¶
Export component initialization function.
Component initialization runs at level 5. Use for middleware and component initialization.
- 参数:
fn -- [in] Function pointer
-
NX_INIT_APP_EXPORT(fn)¶
Export application initialization function.
Application initialization runs last (level 6). Use for application-specific initialization.
- 参数:
fn -- [in] Function pointer
用法 示例¶
#include "nx_init.h"
/* Board-level initialization function */
static int board_clock_init(void) {
/* Configure system clock */
return 0; /* Success */
}
/* Register the function to run at BOARD level */
NX_INIT_BOARD_EXPORT(board_clock_init);
/* Driver initialization function */
static int uart_driver_init(void) {
/* Initialize UART driver */
return 0; /* Success */
}
/* Register the function to run at DRIVER level */
NX_INIT_DRIVER_EXPORT(uart_driver_init);
/* In main() */
int main(void) {
nx_status_t status;
/* Run all registered initialization functions */
status = nx_init_run();
if (status != NX_OK) {
/* Handle initialization failure */
}
/* Check if all initializations succeeded */
if (!nx_init_is_complete()) {
/* Some initializations failed */
nx_init_stats_t stats;
nx_init_get_stats(&stats);
/* Log or handle the failure */
}
/* Application code */
while (1) {
/* ... */
}
}
线程 Safety¶
The Init Framework is not thread-safe. All initialization functions should be
called during system startup before any threads are created. The nx_init_run()
function should only be called once from the main thread.
注意事项¶
Initialization functions execute in level order (BOARD → PREV → BSP → DRIVER → COMPONENT → APP)
Within the same level, execution order is undefined
If an initialization function fails (returns non-zero), execution continues with remaining functions
Use
nx_init_get_stats()to check for failures afternx_init_run()Initialization functions should be lightweight and avoid blocking operations
另请参阅¶
架构 - System Architecture
Error Code 参考 - Error Code Reference
HAL API 参考 - HAL API Reference