初级会员

- 积分
- 176
- 金钱
- 176
- 注册时间
- 2016-7-12
- 在线时间
- 35 小时
|

楼主 |
发表于 2017-7-4 20:49:51
|
显示全部楼层
我自己的程序之前是这样的,void USART3_IRQHandler()
{
u8 i;
if(USART_GetITStatus(USART3,USART_IT_RXNE))
{
//rxdata[status&0x3FFF]=USART_ReceiveData(USART3); //已经注释掉
if((status&0x8000)==1)
{
status=0;
for(i=0;i<USART_REC_LENGTH;i++)
rxdata=0;
} //没有发送,作废 ,溢出中断处理异常
//{
if((status&0x8000)==0)
{
if(USART_ReceiveData(USART3)==0x0d)
status|=0x4000;
else if(USART_ReceiveData(USART3)==0x0a)
{
if((status&0x4000)==0x4000)
status|=0x8000;
else
status&=0x3FFF;
}
rxdata[status&0x3FFF]=USART_ReceiveData(USART3);
status+=1;
if((status&0x3FFF)>200-1)
status=0;
}
}
}
用上面的程序,一旦发送快了,例如每50ms发一次,程序就卡死了,
我把rxdata[status&0x3FFF]=USART_ReceiveData(USART3); 这一句放到了上断程序加粗的位置,结果就不卡死了。程序正常运行。这是个新问题。
问题是,我的程序意思是:如果主程序未处理,就舍弃上一帧数据,
但是,例程是每次先接收一个数据,然后判断是否主程序处理了原来的数据,这样的话,并不能确定这个数据是否是第一个数据啊!
如果不是,这时候进行数据处理,不是要丢失前面的数据了吗?
|
|