服务定位器模式在嵌入式系统中应用实现
- 时钟服务:提供系统时间和延时功能
- 日志服务:实现分级日志输出
- 通信服务:统一管理多种通信接口
- 存储服务:提供非易失性存储器访问
- 传感器服务:统一管理各类传感器
每个服务都有完整的接口定义和具体实现,并通过服务定位器进行统一注册和管理。系统初始化时自动注册所有服务,应用程序可以通过服务 ID 方便地获取所需服务,实现了服务的解耦和统一管理。
/**
* 嵌入式系统服务定位器模式应用
* 实现5个典型服务场景:时钟、日志、通信、存储和传感器
*/
// 服务ID定义
#define SERVICE_CLOCK 0
#define SERVICE_LOGGER 1
#define SERVICE_COMM 2
#define SERVICE_STORAGE 3
#define SERVICE_SENSOR 4
/**
* 服务定位器核心实现
*/
typedef struct {
void* services[10]; // 服务数组
uint8_t service_count;
} service_locator_t;
static service_locator_t locator;
void service_register(uint8_t service_id, void* service) {
if (service_id < 10) {
locator.services[service_id] = service;
}
}
void* service_get(uint8_t service_id) {
if (service_id < 10) {
return locator.services[service_id];
}
return NULL;
}
/**
* 1. 时钟服务实现
*/
typedef struct {
uint32_t (*get_tick)(void);
void (*delay_ms)(uint32_t ms);
void (*init)(void);
} clock_service_t;
static uint32_t clock_tick = 0;
void clock_init(void) {
// 初始化SysTick定时器
SysTick_Config(SystemCoreClock / 1000); // 1ms中断
}
uint32_t clock_get_tick(void) {
return clock_tick;
}
void clock_delay_ms(uint32_t ms) {
uint32_t start = clock_tick;
while ((clock_tick - start) < ms);
}
// SysTick中断处理函数
void SysTick_Handler(void) {
clock_tick++;
}
// 时钟服务实例
clock_service_t clock_service = {