1 Star 0 Fork 2

MyGitee/stm32-task-timer-event

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
os_task_event.h 3.17 KB
一键复制 编辑 原始数据 按行查看 历史
D37_lijiaqiang 提交于 2024-02-20 10:38 . version 1.0.0
#ifndef _OS_TASK_EVENT_H_
#define _OS_TASK_EVENT_H_
#include "stm32l4xx_hal.h"
// 组件任务事件组队列大小
#define TASK_EVENT_SIZE (EVENT_MAX)
// 任务ID异常
#define TASK_EVENT_ID_ERR (0xFF)
// 任务ID已分配最大
#define TASK_EVENT_ID_MAX (TASK_EVENT_SIZE)
// 任务回调数组最大大小
#define TASK_EVENT_CALLBACK_SIZE (5)
// 任务回调数组异常
#define TASK_EVENT_CALLBACK_ID_ERR (TASK_EVENT_CALLBACK_SIZE)
// 任务事件状态
enum os_event_state {
// 默认值
EVENT_STATUS_INIT,
// 取消订阅
EVENT_STATUS_UNSUBSCRIBED,
// 已订阅
EVENT_STATUS_SUBSCRIBED,
// 已发布
EVENT_STATUS_PUBLISH,
// 事件正在执行
EVENT_STATUS_EXECUTE
};
// 任务事件结果
enum os_event_result {
// 错误
RESULT_ERR,
// 正常
RESULT_OK,
// 事件数量已分配最大
RESULT_EVENT_MAXIMUM,
// 事件回调函数为空
RESULT_EVENT_CALLBACK_FUNC_NULL,
// 事件回调函数没找到
RESULT_EVENT_CALLBACK_NOT_FOUND,
// 事件回调函数个数已分配最大
RESULT_EVENT_CALLBACK_MAXIMUM,
// 事件回调函数重复赋值
RESULT_EVENT_CALLBACK_REPEAT,
// 事件ID错误
RESULT_EVENT_ID_ERR,
// 事件ID没找到
RESULT_EVENT_ID_NOT_SUBSCRIBED
};
// 任务事件
enum os_task_event {
// 无事件
EVENT_NONE
// 数据准备完成
EVENT_COLLECT_FINISH,
// 算法分析完成
EVENT_ALG_ANALYSIS_FINISH,
// 以下事件在高功耗任务期间不执行,直到进入低功耗任务再执行
// 接收到串口HART数据
EVENT_UART_HART,
EVENT_MAX
};
// 事件过滤器
enum os_event_filter {
// 禁用事件过滤
EVENT_FILTER_DISABLE,
// 启用事件过滤
EVENT_FILTER_ENABLE
};
// 任务事件属性
typedef int8_t (*task_event_func_t)(uint8_t *param_8u, uint16_t *param_16u);
// 任务事件属性结构体
struct os_event_attr {
// 任务事件ID
enum os_task_event event_id;
// 任务状态
uint8_t event_status;
// 回调函数个数
uint8_t event_callback_count;
// 任务参数
uint8_t *param_8u;
// 任务参数
uint16_t *param_16u;
// 回调函数列表
task_event_func_t event_callbacks[TASK_EVENT_CALLBACK_SIZE];
};
// 事件管理器结构体
struct os_event_manager {
// 事件数量
uint8_t event_count;
// 发布事件数量
uint8_t event_publish_count;
// 事件过滤器
enum os_event_filter event_filter_enable;
// 事件组组
struct os_event_attr events[TASK_EVENT_SIZE];
};
// 事件使用计数
uint8_t event_used_count(void);
// 订阅任务事件
enum os_event_result task_event_subscribe(enum os_task_event event_id, task_event_func_t callback_func);
// 发布任务事件
enum os_event_result task_event_publish(enum os_task_event event_id, uint8_t *param_8u, uint16_t *param_16u);
// 取消订阅
enum os_event_result task_event_unsubscribe(enum os_task_event event_id, task_event_func_t callback_func);
// 触发循环
void task_event_trigger_loop(void);
// 启用事件过滤
void task_event_filter_enable(enum os_event_filter filter);
// 事件管理器结构体
extern struct os_event_manager os_event;
#endif // _OS_TASK_EVENT_H_
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/dc00700/stm32-task-timer-event.git
git@gitee.com:dc00700/stm32-task-timer-event.git
dc00700
stm32-task-timer-event
stm32-task-timer-event
master

搜索帮助