/********** * Copyright (c++) * 目的:定时器多处复用 * 1.初始化定时器,假设定时器中断为1ms */ //定义宏、数值 #define TASK_SUM (3) //表示有三个任务会使用此定时器。 uint16 TaskCount[TASK_SUM]; //存放定时值 uint8 TaskMark[TASK_SUM]; //标志位,0表示时间没到,1表示定时时间到。 //定时器中断服务函数中添加: /**** * @description: 定时终端服务函数 * 在中断中逐个判断,如果定时值为0,表示没有使用此定时器或定时器已经完成定时,不做处理。 * 否则定时器减1,直到为0时相应标志位置1,表示任务的定时值到了。 */ void TimerInterrupt(void) { uint8_t i; for(i = 0; i < TASK_SUM; i++){ if(TaskCount[i]){ TaskCount[i]--; if(TaskCount[i] == 0){ TaskCount[i] = 0x01; } } } } //应用程序中需要定时的地方添加如下代码: //这样只需要在任务判断TaskMask[0]是否为0x01即可。 //至此1个定时器的复用问题就实现了。 TaskCount[0] = 20; //延时20ms TaskMask[0] = 0x00; //启动此任务的定时器
分类:
C工具
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】