用的是已经移植好的UCOS工程模板,在调用 OS_ENTER_CRITICAL(); 进入临界段执行后,当串口发出中断时,依然转到串口中断服务函数。<br /><br />难道不能屏蔽硬件中断? <br /><br />OS_ENTER_CRITICAL(); //进入临界段<br /> <br /> Disp_Imgg(); <br /> <br />OS_EXIT_CRITICAL();<br /><br />此法不行,我就临时关闭串中断UARTDisable(UART1_BASE);果然在进入Disp_Imgg()时不会跳转到中断服务函数中,但是当执行Disp_Imgg()后,启用串口中断,依然保留着在执行Disp_Imgg()时间内的中断,等于延时了中断的到来,这也是想不明白的。<br /><br /> <br /> IntDisable(UART1_BASE); //关闭串口中断<br /> Disp_Imgg();<br /> IntEnable(UART1_BASE); <br /> <br /><br />//中断服务函数<br /><br />void UART1_ISR(void)<br />{ //OSIntEnter(); <br /> static unsigned short n = 0;<br /> char c;<br /> char buf[UART1_RX_MAX+1];<br /><br /> UARTIntClear(UART1_BASE , UART_INT_RX | UART_INT_RT);<br /> c = UARTCharGet(UART1_BASE);<br /><br /> if ( c == '\r' ) {<br /> buf[n] = '\0';<br /> n = 0;<br /> UART_Puts("THEBUF++\r\n");<br /> UART_Puts(buf);<br /> WhereID(buf);<br /> UART_Puts("--buzzer....\r\n");<br /> } else {<br /> if ( n < UART1_RX_MAX ) {<br /> if ( isprint(c) ) {<br /> buf[n++] = c;<br /> UART_Puts("THEN++\r\n");<br /> <br /> }<br /> }<br /> }<br /> <br /> // OSIntExit();<br />}<br /> |
|