您好:关于延时去抖我有一些不解,请看下面的程序段
void Task(void *pdata) { pdata = pdata; /* 避免编译警告 */
for (;;) { OSTimeDly(OS_TICKS_PER_SEC / 50); /* 第一个延时20毫秒 */ if ((IOPIN & KEY1) != 0) { continue; } OSTimeDly(OS_TICKS_PER_SEC / 50);/*第二个延时20毫秒用于去抖*/ if ((IOPIN & KEY1) != 0) { continue; } OSTaskResume(0); while ((IOPIN & KEY1) == 0) { OSTimeDly(OS_TICKS_PER_SEC / 50); /*第三个延时20毫秒 */ } } }
疑问: 1.第一个延时20毫秒是起什么作用的? 2.当有按键按下时将执行第二个延时,执行去抖延时。若延时后按键仍被按下则往下执行OSTaskResume(0);恢复任务,关键是若去抖延时后按键信息不再存在,那么程序将在第二个 if ((IOPIN & KEY1) != 0) { continue; } 中循环,若再次有按键按下信息时,是不是就直接从该循环中往下执行了,若是的话,那么这次按键信息就没有延时去抖功能了!不知分析对否? 3.若执行到OSTaskResume(0); 即恢复任务后,将转去执行被挂起的程序,不知OSTaskResume(0);后面的语句段有和作用? 请多多执教,不胜感激!
|