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