Application Initialization and Setup¶
Overview¶
The application module provides a unified interface for initializing and managing an embedded application's boot sequence and clock providers. This design allows applications to register their initialization routines and timing sources with the CFBD framework.
Architecture¶
The CFBDApplication structure acts as a central registry containing:
- Bootstrap function and parameters for system initialization
- Clock frequency provider for timing calculations
- Tick counter provider for interval measurement
Basic Application Setup¶
#include "lib/application/app.h"
// Clock providers (from platform code)
uint32_t get_system_clock_hz(void) {
return 72000000; // STM32F103 at 72 MHz
}
uint32_t get_tick_count(void) {
return SysTick->VAL; // Read from system timer
}
// Application bootstrap
CFBD_Bool app_bootstrap(void* self_handle, void* args) {
// Initialize peripherals
init_gpio();
init_uart();
return CFBD_TRUE;
}
// Application instance
CFBDApplication g_app = {
.selfBootFunc = app_bootstrap,
.bootargs = NULL,
.freq_provider = get_system_clock_hz,
.tick_provider = get_tick_count
};
// Application retrieval
CFBDApplication* getApp(CFBD_Bool request_auto_boot) {
if (request_auto_boot && g_app.selfBootFunc) {
g_app.selfBootFunc(&g_app, g_app.bootargs);
}
return &g_app;
}
Timing and Clock Coordination¶
// Get current timing information
CFBDApplication* app = getApp(CFBD_FALSE);
uint32_t freq = app->freq_provider(); // Get clock frequency
uint32_t ticks = app->tick_provider(); // Get current tick count
// Calculate delay in milliseconds
uint32_t ms_per_tick = 1000 / freq;
Updated on 2026-02-03 at 13:21:55 +0000