当前位置: 首页 > news >正文

服务定位器模式在嵌入式系统中应用实现

  1. 时钟服务:提供系统时间和延时功能
  2. 日志服务:实现分级日志输出
  3. 通信服务:统一管理多种通信接口
  4. 存储服务:提供非易失性存储器访问
  5. 传感器服务:统一管理各类传感器

每个服务都有完整的接口定义和具体实现,并通过服务定位器进行统一注册和管理。系统初始化时自动注册所有服务,应用程序可以通过服务 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 = {

http://www.lqws.cn/news/114841.html

相关文章:

  • 在虚拟宇宙中低语——进程间通信,Linux命名管道的前世今生
  • 【Linux】进程 信号保存 信号处理 OS用户态/内核态
  • 力扣面试150题--岛屿数量
  • 【位运算】丢失的数字(easy)
  • linux操作系统---网络协议
  • 【开源工具】基于PyQt5工作时长计算器工具开发全解析
  • Appium如何支持ios真机测试
  • 宝塔使用docker创建n8n
  • 如何在IDE中通过Spark操作Hive
  • Hive开窗函数的进阶SQL案例
  • 笔记 | docker构建失败
  • 【转bin】EXCEL数据转bin
  • 图神经网络实战——图属性度量方法详解
  • Electron打包前端和后端为exe
  • stress 服务器压力测试的工具学习
  • 无字母数字webshell的命令执行
  • xcode 各版本真机调试包下载
  • ShardingSphere-JDBC 与 Sharding-JDBC 的对比与区别
  • JVM——类加载的流程与机制
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十)
  • 【映射】2024-睿抗-AcWing 5834. 谁进线下了?
  • 从OSI到TCP/IP:网络协议的演变与作用
  • 鸿蒙任务项设置案例实战
  • EasyRTC嵌入式音视频通信SDK音视频功能驱动视频业务多场景应用
  • 计算机视觉处理----OpenCV(从摄像头采集视频、视频处理与视频录制)
  • 【android bluetooth 协议分析 14】【HFP详解 1】【案例一: 手机侧显示来电,但车机侧没有显示来电: 讲解AT+CLCC命令】
  • 【后端】RPC
  • Android 项目的核心配置文件
  • 在VSCode中开发一个uni-app项目
  • Linux RPC 和 NFS 教程