金牌会员
 
- 积分
- 2443
- 金钱
- 2443
- 注册时间
- 2017-9-13
- 在线时间
- 559 小时
|
发表于 2019-4-3 08:25:38
|
显示全部楼层
//数据处理线程
unsigned char rcvbuffer[8*1024] = {0};
unsigned char tempbuffer[8*1024] = {0};
int rcvnum = 0;
int handlenum = 0;
_Bool rcvflg = true;
void UsartRx_TaskEntry(ULONG ulPara)
{
int tempnum = 0;
while(1)
{
if(rcvflg == false)
{
if (rcvnum < handlenum)
{
tempnum = rcvnum;
memcpy(tempbuffer,rcvbuffer+handlenum,sizeof(rcvbuffer)-handlenum);
memcpy(tempbuffer+sizeof(rcvbuffer)-handlenum,rcvbuffer,tempnum);
//数据处理函数
if(tempnum == rcvnum)
{
rcvnum = 0;
handlenum = 0;
}
else
{
handlenum = tempnum;
}
}
else
{
if(rcvnum > 0)
{
tempnum = rcvnum;
memcpy(tempbuffer,rcvbuffer+handlenum,tempnum-handlenum);
//数据处理函数
if(tempnum == rcvnum)
{
rcvnum = 0;
handlenum = 0;
}
else
{
handlenum = tempnum;
}
}
}
}
vTaskDelay(10);
}
}
//接收中断函数
extern unsigned char rcvbuffer[8*1024];
extern int rcvnum;
extern _Bool rcvflg;
void USART1_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
rcvflg = 1;
Res =USART_ReceiveData(USART1);
rcvbuffer[rcvnum] = Res;
rcvnum++;
if(rcvnum == sizeof(rcvbuffer))
{
rcvnum = 0;
}
rcvflg = 0;
}
} |
|