- 打卡等级:常住居民I
- 打卡总天数:69
- 最近打卡:2025-05-03 09:34:20
已绑定手机
中级会员
- 积分
- 334
|
发表于 2025-2-17 15:26:07
|
显示全部楼层
Ai8051U教学视频第八讲,定时器周期性调度任务。用定时器来实现周期性的任务调度,避免了用循环方法,释放单片机资源,提高系统响应速度,改善用户体验。
用一个定时器实现这个任务。LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED3 0.9秒取反一次
先是通过数组的方式来定义任务:
static TASK_COMPONENTS Task_Comps[] = {
// 状态 计数 周期 函数
{0, 300, 300, LED0_Blink}, /* task 1 Period: 300ms */
{0, 600, 600, LED1_Blink}, /* task 1 Period: 600ms */
{0, 900, 900, LED2_Blink}, /* task 1 Period: 600ms */
{0, 10, 10, KEY_Task}, /* task 1 Period: 600ms */
};
任务回调处理:
u8 Tasks_Max = sizeof(Task_Comps) / sizeof(Task_Comps[0]);
void Task_Pro_Handler_Callback(void)
{
u8 i;
for (i = 0; i < Tasks_Max; i++)
{
if (Task_Comps[i].Run) /* If task can be run */
{
Task_Comps[i].Run = 0; /* Flag clear 0 */
Task_Comps[i].TaskHook(); /* Run task */
}
}
} |
|