Re: [問題] 變數問題

看板ASM (組合語言)作者 (藍色感覺)時間15年前 (2009/11/25 23:53), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《BlueFeel (藍色感覺)》之銘言: : sorry~之前那篇問得有一點攏統,重寫一下問題... : 程式如下. : 程式正確時,test會因為0x0130, while跳開而完成case0. : 我將 : printf("\r\n%04X",test); : 加在 : while(test < x0130); : 下面 : 程式不正確時,test會為0x0100,且while跳開,完成case0. : 問題就在........為什麼 test有0x0100, while會跳開呢? : 後來, 我又加了 : while(test < x0130); : 在 : while(test < x0130); : 後面, : 此問題就不再發生了... : 雖然這是一個解決方法,但是原因一直找不到.... : 感覺好像是中斷在test=0x0100先跳回主程式,讓case0先完成, : 資料又進來了,又跳到中斷將test計數完(資料會一直進來) : test 我宣告全域變數耶? why? : 理論上,中斷跳回,應該會卡在while等, 因為沒有大於0x0130.. : 但printf test 卻顯示最後是0x0100..... : 一直想不通!! 這現象是偶然發生,不是一直發生... : ================================ : 主程式 : case '0' : : test =0; : while(test < x0130); : break; : 串列函式 : static void Serial_Port_ISR (void) interrupt 4 : { : /* Received data interrupt. */ : if (RI) : { : RI = 0; : if (upload == 1) : { : XBYTE[test] = SBUF; : test++; : } : } : else : { : if (((r_in - r_out) & ~(RBUF_SIZE-1)) == 0) : { : rbuf [r_in & (RBUF_SIZE-1)] = SBUF; : r_in++; : } : } : } 補TI Code /* Transmitted data interrupt. */ if (TI) { TI = 0; if (t_in != t_out) { SBUF = tbuf [t_out & (TBUF_SIZE-1)]; t_out++; ti_restart = 0; } else ti_restart = 1; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.236.8

11/26 12:42, , 1F
看起來有TI時還是會執行到 RI 那邊的 else 部份
11/26 12:42, 1F
文章代碼(AID): #1B3LBhdd (ASM)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
17
完整討論串 (本文為第 2 之 3 篇):
1
17
文章代碼(AID): #1B3LBhdd (ASM)