初级会员
- 积分
- 62
- 金钱
- 62
- 注册时间
- 2019-6-3
- 在线时间
- 17 小时
|
ucosII,断电检测,检测到就BEEP响三秒不响二秒,要示实时,即没有检测到不响,检测到,三秒不到断电了,就立即不响
现在碰到两个问题
1.用信号量,那么,信号量会一直加上去,就算断电恢复了也无法停止报警,
2.怎么实现在检测到的三秒内恢复供电了,立马不报警
当然可以用软件定时器回调函数的方法实现,请问有没有系统高度的方法去实现上述第一行的功能
以下为部分代码
#define BEEP_TASK_PRIO 9
#define PowerCheck_TASK_PRIO 12
sem_p=OSSemCreate(1);
//PowerCheck任务
void PowerCheck_task(void *pdata)
{
(void)pdata;
while(1)
{
if(GPIO_ReadInputDataBit(BEEP_PORT,PG)==0)
{
OSSemPost(sem_p);
}
OSTimeDlyHMSM(0,0,1,0);//1s执行一次
}
}
//BEEP任务
void beep_task(void *pdata)
{
INT8U err;
(void)pdata;
while(1)
{
OSSemPend(sem_p,0,&err);
BEEP_ON();
OSTimeDlyHMSM(0,0,3,0);//1s执行一次
BEEP_OFF();
OSTimeDlyHMSM(0,0,2,0);//1s执行一次
}
}
上述程序还有一个问题,就是一直检测断电的话,信号量加上去,然后恢复供电,就一直执行BEEP任务
|
|