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