feat: 实现事件驱动应用框架,支持前台/后台分离、事件优先级和CPU占用控制

This commit is contained in:
2026-07-10 11:30:48 +08:00
parent 00c00fb60e
commit b4fabf85b5
11 changed files with 2487 additions and 541 deletions

View File

@@ -37,6 +37,76 @@ typedef struct {
unsigned char addr[3]; // 24位对码地址 (EV1527 20位物理地址 + 4位状态数据码)
} Sensor_Slot;
/* =========================================================================
* 应用框架核心定义
* ========================================================================= */
// 应用ID定义
typedef enum {
APP_ID_CLOCK, // 0: 待机时钟应用
APP_ID_MENU, // 1: 主菜单应用
APP_ID_PAIR, // 2: 配对与微调应用
APP_ID_ALARM, // 3: 传感器报警应用
APP_ID_SOS, // 4: 主动求救应用
APP_ID_MAX // 应用数量上限
} AppID;
// 应用类型枚举
typedef enum {
APP_TYPE_FOREGROUND, // 前台应用:独占屏幕和用户交互
APP_TYPE_BACKGROUND // 后台应用:无屏幕显示,仅监听事件
} AppType;
// 事件处理返回值
typedef enum {
EVENT_HANDLED, // 事件已处理
EVENT_IGNORED // 事件未处理,继续传递给下一个应用
} EventResult;
// 事件优先级枚举
typedef enum {
EVENT_PRIORITY_LOW, // 低优先级:普通按键等
EVENT_PRIORITY_NORMAL, // 正常优先级:大部分事件
EVENT_PRIORITY_HIGH, // 高优先级:报警相关
EVENT_PRIORITY_URGENT // 紧急优先级SOS等直接越过队列
} EventPriority;
// 扩展事件结构体
typedef struct {
KeyEvent key_event; // 原始按键事件
EventPriority priority; // 事件优先级
u32 extra_data; // 额外数据(如射频地址等)
u8 extra_size; // 额外数据大小
} SystemEvent;
// 应用生命周期回调函数类型
typedef void (*AppStartFunc)(void);
typedef void (*AppRunFunc)(void);
typedef void (*AppCloseFunc)(void);
typedef EventResult (*AppEventFunc)(SystemEvent evt);
// 应用描述符结构体
typedef struct {
AppID app_id; // 应用唯一标识
AppType app_type; // 应用类型(前台/后台)
char *app_name; // 应用名称(用于调试)
AppStartFunc OnStart; // 启动回调:应用切入前台,加载资源、初始化显示
AppRunFunc onRun; // 循环回调:主循环轮询调用,执行非阻塞业务逻辑
AppCloseFunc onClose; // 关闭回调:应用退出前台,保存状态、清理外设
AppEventFunc onEvent; // 事件回调:接收并处理来自事件层的系统事件
bit is_active; // 当前是否活跃(仅对前台应用有效)
bit is_running; // 应用是否处于运行状态
} WristbandApp;
/* =========================================================================
* 事件队列配置
* ========================================================================= */
#define EVENT_QUEUE_DEPTH 8 // 事件队列深度(环形缓冲区大小)
#define APP_ONRUN_MAX_TICKS 5 // onRun最大执行时间限制单位1ms tick
#define MAIN_Fosc 24000000UL
#define CLONED_ADDR 0x37A86UL