# SwTimer **Repository Path**: openes/swtimer ## Basic Information - **Project Name**: SwTimer - **Description**: 软件定时器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-08-15 - **Last Updated**: 2025-07-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实现功能:软件定时器 * 适应平台:适合小型嵌入式无操作系统平台、单片机平台等 * 注意事项: 1. 此代码未采用动态内存分配方式(malloc/free),而是使用数组形式来开辟定时器所需内存空间 2. 原因:适应平台一般内存较小,且无内存管理,可能产生碎片化等问题 3. 优点:简单易用且执行速度快,缺点:不灵活。所以移植时请根据实际情况将宏 TIMERS_MAX_NUM 修改为合适的值 4. 目前代码仅支持32位芯片平台 5. 如若需要精准定时,还需使用硬件定时器实现 * 使用说明: 1. 根据实际情况修改TIMERS_MAX_NUM 2. 调用swTimersInit函数初始化定时器 3. 将swTimerProcess函数放入主循环即可 4. 调用swTimerCreat函数创建定时器 5. 调用swTimerStart函数启动定时器 6. 调用swTimerStop函数关闭定时器 7. 调用swTimerDelete函数删除定时器 * 示例代码: ```c uint16 TimerID = 0xffff; /* 在需要移植的平台中找到类似功能的函数或者自己通过硬件定时器实现类似函数 */ uint32 GetSysTick(void) { return uwTick; /* uwTick的值必须定时周期+1(假设uwTick的值每1ms加1) */ } void func_callback(void) { /* 这个函数每1000ms执行一次 */ } int main(void) { int ret = 0; /* 其它初始化代码 */ swTimersInit(GetSysTick); swTimerCreat(1000, SWTMR_MODE_PERIOIC,(TMRCALLBACK)func_callback, NULL, &TimerID); swTimerStart(TimerID); while(1) { /* 其它函数调用 */ swTimerProcess(); /* 将这个函数放在主循环中即可 */ } return 0; } ```