(我可能發錯區了,能不能麻煩管理幫我移到問答區)
最近做項目,遇到了一個非常神奇的事情。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;
}
}
}
|