本文只是自己在开发项目中遇到的一个小问题,特备有意思,特意记录下.
在开发电机启动过程中,使用pwm来做缓启动和缓停止,由于在zigbee stack中是事件驱动的,所以只有一个任务处理完成了才能切换到下一个任务,但这在以下场景中是有问题的,假设电机启动要1s,进行正向转动,那么此时来个中断,要电机反向转动,一般的常规方法,只能等待电机启动完成,电机正常运转后退出启动任务时才能执行电机反转的任务,很明显,这是不正确的,假设一个场景,有人在启动过程中被夹住了,继续启动只能被夹的更严重,所以这种事不合适的,那么如果让启动过程立即停止,进而执行反向启动过程就很重要.在我的项目中使用一个局部变量来计算端口通电的时间,如下:
int cycle=500;
for (int i = 0; i < cycle; i++) {
fwd=off;
delay(i);
fwd=on;
delay(cycle - i);
}
使用 i 来决定few为on 和off的时间,那么如果进入中断后直接将 i 和 cycle相同,那么在下一次循环就能够退出for循环,进而退出任务,可以快速的切换到下一个任务,去执行反向转动的启动.