中级会员
 
- 积分
- 425
- 金钱
- 425
- 注册时间
- 2019-5-12
- 在线时间
- 168 小时
|
1金钱
本帖最后由 hejun96 于 2019-9-25 16:51 编辑
这段程序中是一段业务代码,有关于一个智能饮水机的主控板程序,长按冷水键+童锁键后,运行到排气状态,只有把IWDG_Enable(看门狗使能)注释掉后断点调试才正常,蜂鸣器响3声。如果是把看门狗打开的话,蜂鸣器在进入这段程序后会一直响,相当于是程序跑飞了?那应该具体怎么去做?
也就是看门狗关闭后,也就是把IWDG_Enable的那行注释掉,然后全速运行,蜂鸣器依然被触动,但是在断点调试时把狗关了,却是好的,所以
IWDG_Enable + RUN = 排气状态下 beep 持续响 ----> 不正常
去掉IWDG_Enable + RUN = 排气状态下 beep 持续响 -----> 不正常
IWDG_Enable + 断点调试 = 排气状态下 beep 持续响 ------> 不正常
去掉IWDG_Enable + 断点调试 = 排气状态下 beep 响3声 ---->正常
如何在全速跑时让其正常响3声,而不是持续响???
if(scold==1 && child==1) //按下冷水键和童锁键10s处于排气过程 (问题点???)
{
System_Sta.s.clean_self_cmd = FLAG_OFF;//自排水标志位turn off
vent_flag = 1;
scold = child = 0;
Save_Data.s.self_clean_flag = 0;//保存掉电前自排水完成状态
System_Sta.s.Vent_Flag = FLAG_ON;//自排气标志位打开
System_Data.Cold_Water_G_Tick = 0;//
System_Sta.s.Cold_Water_G_Flag = FLAG_OFF;
System_Data.Normal_Water_H_Tick = 0;
System_Sta.s.Normal_Water_H_Flag = FLAG_OFF;
// System_Data.cold_water_time += System_Data.cold_water_flag_tick/1000;
// System_Data.cold_water_flag_tick = FLAG_OFF;
// System_Sta.s.cold_water_timer_flag = TIMER_RESET;
// System_Sta.s.cold_water_on_flag = FLAG_OFF;
// System_Data.Normal_Water_H_Off_Time += System_Data.Normal_Water_H_Tick/1000;
// System_Data.Normal_Water_H_Tick = FLAG_OFF;
// System_Sta.s.normal_water_timer_flag = TIMER_RESET;
// System_Sta.s.normal_water_on_flag = FLAG_OFF;
// i2cWriteBuffer1(AT24C02_ADDR,AT24C02_REG,sizeof(SAVE_DATA_UNION),(u8*)&Save_Data);/*写入数据*/
// for (int i = 0; i < sizeof(STA_UNION); i++)
// {
// System_Sta.sta = 0;
// }
//
// memset((void *)(&System_Data),0,sizeof(DATA_STRUCT));
/* 蜂鸣器连续响3声 */
System_Sta.s.beep_timer_flag = TIMER_RUN;
Block_Timer(50);//阻塞时间50ms
System_Sta.s.beep_timer_flag = TIMER_RESET;
Block_Timer(200);//阻塞时间200ms
System_Sta.s.beep_timer_flag = TIMER_RUN;
Block_Timer(50);//阻塞时间50ms
System_Sta.s.beep_timer_flag = TIMER_RESET;
Block_Timer(200);//阻塞时间200ms
System_Sta.s.beep_timer_flag = TIMER_RUN;
Block_Timer(50);//阻塞时间50ms
System_Sta.s.beep_timer_flag = TIMER_RESET;
/* 蜂鸣器的定时器标志位关闭 */
System_Sta.s.beep_timer_flag = TIMER_END;
/* 把定时器的标志位结束 */
//System_Sta.s.timer_flag = TIMER_END;
System_Data.flash_water_flag[0]='0';
System_Data.flash_water_flag[1]='2';/*停止清洗*/
Trans_dat_append(STATE_23);//整机自清洗指令
Vent_Work();
/*
while(vent_flag)
{
IWDG_ReloadCounter();//reload
};
*/
}
|
|