Re: [問題] 變數問題
※ 引述《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
11/26 12:42, 1F
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章