打印

串口偶尔丢一个换行,把代码贴出来帮我看看,一起学习

[复制链接]
1693|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ecomputer|  楼主 | 2010-1-4 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define  R2_BUFF_SIZE 4096
struct com2_str
{
vu32   pIn  ;   //入指针
vu32   pOut ;   //出指针
vu32   pCount;  //计数
vu8   pAny ;   //查询指针
char  Buf[R2_BUFF_SIZE];
};
struct com2_str uart2;

// 向串口2缓冲队列加入一个字符
static void Uart2Add(struct com2_str *com ,char data)
{
if(com->pCount > 0 && com->pIn == com->pOut)
{
  printf("COM2 BUFF FULL!\r\n");
  return;
}
else
{
  com->Buf[com->pIn] = data;
  com->pIn = (com->pIn + 1)%R2_BUFF_SIZE;
  com->pCount++;
}
}

//从串口2缓冲队列取队头字符
extern char GetUart2(struct com2_str *com)
{
char temp;
temp = com->Buf[com->pOut];
com->pOut = (com->pOut + 1)%R2_BUFF_SIZE;
com->pCount--;
return temp;
}

//串口2中断服务程序
extern void Uart2Isr(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE) == SET)
  {
   USART_ClearITPendingBit(USART2, USART_IT_RXNE); //清标志
  Uart2Add(&uart2 ,USART_ReceiveData(USART2));

}
}

void AynDataSwapFlag(void)
{

char temp;
if(uart2.pCount == 0 ) return ;
while(uart2.pCount != 0 )
{
  temp = GetUart2(&uart2);   
  Uart1Putc(temp); //串口1输出
  if(VALIAD_ECHO(temp))//如果是有效的字符串
  {
   Echo.Buf[GprsEcho.Len++] = temp; //将temp加到另一个缓冲区
   if(IS_LF(temp)) /* 如果收到换行 */
   {
    GprsEcho.Buf[GprsEcho.Len] = '\0';
    if(GprsEcho.Len >= 3)/* 注意仅收到回车换行不处理 */
     ProDataSwapFlag(); /* 处理字符串 */
    GprsEcho.Len = 0;  /* 注意处理完后清空回显缓冲区 */
   }
  }
  else
  GprsEcho.Len = 0;
   
}
return;
}

现在的情况是,串口 在判断换行(if(IS_LF(temp))
)时有时候检测不到换行,所以也就判断不了,另外那边是肯定发过来了,这样处理是不是有bug?

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

261

帖子

2

粉丝