OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5993|回复: 1

关于UCOSII下的beep报警控制方案问题

[复制链接]

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2019-6-3
在线时间
17 小时
发表于 2019-8-12 19:17:39 | 显示全部楼层 |阅读模式
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任务

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2019-6-3
在线时间
17 小时
 楼主| 发表于 2020-12-21 11:11:36 | 显示全部楼层
可以用一个变量来检测蜂鸣器是否需要开启
然后通过这个变量来开关软件定时器的启动和停止
然后在回调函数中实现具体的代码,当然里面还有蜂鸣器工作间隙时间的逻辑
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 11:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表