中文 | English
这是一个轻量级的 Eventloop 库,用于嵌入式 C 项目。它的设计目标是简单易用。
- 简单易用
- 无动态内存分配
- 无依赖
- 无操作系统依赖
- 易于移植到任何平台,无汇编代码
- 低内存占用
- 纯 C 实现
void async_task(void *arg) {
// do something
}
// 1000ms 后调用 async_task
el_setTimeout(async_task,NULL,1000);
// 每隔 1000ms 调用 async_task
el_setInterval(async_task,NULL,1000);
el_enterLoop();
你可以在 examples 目录中看到更多的例子。
打开 el_port.h 并定义 el_tick_t 为你的系统 tick 类型。例如,如果你的系统 tick 是 32 位的,你可以定义 el_tick_t 为 uint32_t。
typedef uint32_t el_tick_t;
定义 el_portTickGet 为获取系统 tick 的函数。系统 tick 是系统启动以来的毫秒数。例如,在 linux 中,我们可以使用 gettimeofday 来获取系统 tick。
el_tick_t el_portTickGet() {
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
幸运的是,许多平台,如 STM32,都有一个系统 tick 计数器。你可以通过读取计数器来获取系统 tick。
在超时后运行任务。
void el_setTimeout(el_task_t task, void *arg, uint32_t timeout);
每隔一段时间运行任务。
void el_setInterval(el_task_t task, void *arg, uint32_t interval);
取消一个Timeout任务。
void el_clearTimeout(el_task_t task);
取消一个Interval任务。
void el_clearInterval(el_task_t task);
运行事件循环。
void el_enterLoop();
MIT License
作者: Evan Xiao