feat: 实现事件驱动应用框架,支持前台/后台分离、事件优先级和CPU占用控制
This commit is contained in:
70
App/config.h
70
App/config.h
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user