(我可能发错区了,能不能麻烦管理帮我移到问答区)
最近做项目,遇到了一个非常神奇的事情。ms_up_flag 在定时器中断中每1ms弹出一起,软件置0,然后执行下面的代码。
调式的时候发现,只要if(p1_w_cnt<p1_w_s1_v)这个判断的{}里面有任何内容,那么按键检测函数便会失效。
为了排除其它因素的影响,我重新声明了一个变量xxx,把所有无关代码删掉,这个变量在任何地方都是没有用到的,只在if(p1_w_cnt<p1_w_s1_v)判断内执行一个赋0操作。
现在的情况是,我只要把这一句备注了,按键检测正常,只要这一行不备注,按键检测就无法执行。但xxx=0这句代码和其它任何代码都没有任何关连。
百思不得其解,望各位提供思路、讨论排查原因,感激。
目前已知情况:
单片机没有死机,因为其它程序段的倒数能够正常进行。已测试过keil不同的代码优化级数无解
#define p1_w_s1_v p1_w[1]
u16 xdata jg1_cnt=0,p1_w_cnt=0;
void softtimer()
{
if(ms_up_flag)
{
ms_up_flag=0;
if(KV2_cnt_flag|KV4_cnt_flag|KV8_cnt_flag)
{
KV_LP_counter++;
}
if(mode==m_zl&&gear>0)
{
if(p1_w_cnt<p1_w_s1_v)
{
xxx=0;
}
}
}
|