作者BlueFeel (蓝色感觉)
看板ASM
标题Re: [问题] 变数问题
时间Wed Nov 25 23:53:13 2009
※ 引述《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
1F:→ ksmrt0123:看起来有TI时还是会执行到 RI 那边的 else 部份 11/26 12:42