1.项目文档新增etask介绍。

This commit is contained in:
MacRsh
2023-10-13 15:09:01 +08:00
parent 05ae1bdfc1
commit 1f2ddf8fb2

View File

@@ -89,6 +89,71 @@ mr_device_close(spi1_device);
每个组件都承担特定的功能或任务例如任务管理组件专注于对程序任务的管理使得裸机与RTOS程序可高效移植。开发者可自主选择需要的组件添加到项目中。
### etask组件
事件任务框架是一种用于处理异步事件和任务的编程模型。它提供了结构化的方式来管理和调度事件和任务,在并发环境中实现高效处理。
使用事件任务框架可以抽象和管理复杂的并发处理逻辑,提高代码的可维护性和可扩展性。使开发人员能够专注于事件处理逻辑,而无需关注底层的并发细节。
事件任务框架支持动态添加和移除事件任务,通过添加或替换事件任务来实现新增功能或修改业务逻辑,而无需修改其他代码。这种可插拔性使系统更灵活、能快速响应需求变化。
使用示例:
```c
/* 定义事件 */
#define EVENT_1 1234
#define EVENT_2 "event_3"
#define EVENT_3 3456
/* 定义事件回调 */
mr_err_t event1_cb(mr_etask_t etask, void *args)
{
printf("event1_cb\r\n");
return MR_ERR_OK;
}
mr_err_t event2_cb(mr_etask_t etask, void *args)
{
printf("event2_cb\r\n");
return MR_ERR_OK;
}
mr_err_t event3_cb(mr_etask_t etask, void *args)
{
printf("event3_cb\r\n");
return MR_ERR_OK;
}
/* 定义事件任务 */
struct mr_etask etask;
int main(void)
{
/* 添加事件任务 */
mr_etask_add(&etask, "etask", 3);
/* 启动普通事件 */
mr_etask_start(&etask, EVENT_1, MR_ETASK_SFLAG_EVENT, 0, event1_cb, NULL);
mr_etask_start(&etask, mr_etask_str_to_id(EVENT_2), MR_ETASK_SFLAG_EVENT, 0, event2_cb, NULL);
/* 启动定时事件 */
mr_etask_start(&etask, EVENT_3, MR_ETASK_SFLAG_TIMER | MR_ETASK_SFLAG_HARD, 5, event3_cb, NULL);
/* 延迟唤醒事件1 */
mr_etask_wakeup(&etask, EVENT_1, MR_ETASK_WFLAG_DELAY);
/* 立即唤醒事件2 */
mr_etask_wakeup(&etask, mr_etask_str_to_id(EVENT_2), MR_ETASK_WFLAG_NOW);
while (1)
{
/* 更新事件任务时钟 */
mr_etask_tick_update(&etask);
/* 事件任务处理 */
mr_etask_handle(&etask);
}
}
```
### 更多组件请查看 `module` 目录
----------
# 代码目录