初级会员
- 积分
- 54
- 金钱
- 54
- 注册时间
- 2016-6-22
- 在线时间
- 8 小时
|
1金钱
看了视频中断的章节,又看了程序,有这样的疑问,下面的程序中进入了几次中断?在调用OSIntExit(); 后不是已经启动任务调度了吗?要是进入好多次中断那用OSIntExit()调度后岂不是用的串口接受的数据。看例程的意思是将串口的数据都接受完之后才,用OSIntExit()调度。可按照程序的运行好像是接受一个数运行一次OSIntExit()调度,弄迷糊了,请指点下谢谢
void USART1_IRQHandler(void) //′®¿ú1ÖD¶Ï·tÎñ3ìDò
{
u8 Res;
#if SYSTEM_SUPPORT_OS //ê1óÃUCOS2ù×÷Ïμí3
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
{
Res =USART_ReceiveData(USART1);//(USART1->DR); //¶á衽óêÕμ½μÄêy¾Y
if((USART_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
{
if(USART_RX_STA&0x4000)//½óêÕμ½áË0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
else USART_RX_STA|=0x8000; //½óêÕíê3éáË
}
else //»1ûêÕμ½0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ
}
}
}
}
#if SYSTEM_SUPPORT_OS
OSIntExit(); //íË3öÖD¶Ï
#endif
}
|
|