Kacofree 发表于 2013-7-30 14:35:30

为什么我创建的UART处理函数会出现多次响应问题?

我用BC417 做串口通信,响应函数如下,但是不知道怎么回事,我用串口助手向BC417 发一次数据,但是会多次进入下面的这段响应程序。好奇怪。
      
static void uartHandler(Task task, MessageId id, Message data)
{
   char s;
   int   func = 0;   
   uint16supplment=0;
   
   switch(id)
   {
      case (MESSAGE_MORE_DATA):
         GetInputLine(&s);
         /* */
         UpperCase(&s);
         /* Remove tokens from input string, return 3 tokens */
         func = ReturnTokens(&s,&supplment);
         atCmdHandle(func,&supplment);      
         break;   
      default:
         break;
   }
}

鲲鹏之志 发表于 2013-7-30 18:06:45

你可能是发了多个字节吧。有可能第一字节到串口后,串口立即发消息给任务了。你可以打印出了看看

Kacofree 发表于 2013-7-30 18:40:29

鲲鹏之志 发表于 2013-7-30 18:06
你可能是发了多个字节吧。有可能第一字节到串口后,串口立即发消息给任务了。你可以打印出了看看

是的,我发送了AT+RE,但是难道不能够一次发送多个字节吗?
但是我发现 当我发送AT+RE ,程序进入到上面的uart处理函数后,依然能打印出AT+RE,这就说明系统一次将我的5个byte都接受到了。

Kacofree 发表于 2013-7-30 18:42:33

Kacofree 发表于 2013-7-30 18:40
是的,我发送了AT+RE,但是难道不能够一次发送多个字节吗?
但是我发现 当我发送AT+RE ,程序进入到上面 ...

只是,处理一次后,程序会再一次进入了uart处理函数,而且同样的会打印出AT+RE,感觉是UART处理完后,没有清除uart 寄存器状态。。

鲲鹏之志 发表于 2013-7-30 19:08:38

消息处理里面,要用SourceDrop(src,size);函数才能把寄存器接收的数据清楚掉

Kacofree 发表于 2013-7-30 19:28:41

鲲鹏之志 发表于 2013-7-30 19:08
消息处理里面,要用SourceDrop(src,size);函数才能把寄存器接收的数据清楚掉

我有加 ,在 GetInputLine(&s)函数(接受uart 数据)退出之前都有做这个动作。

鲲鹏之志 发表于 2013-7-30 21:09:24

DEBUG(("MESSAGE_MORE_DATA\n"));
{
        Source src = StreamUartSource();/* get the uart source header */            
      uint8 *s = (uint8*)SourceMap(src);/* get the uart source memory */            
      uint8 size = SourceSize(src);
      SourceDrop(src,size);


这种方式可以吗?我没有用过你这个方法。试试看。

whljsh 发表于 2013-12-3 10:32:25

路过看看。

yuewen20080812 发表于 2013-12-3 14:27:48

路过学习了

mupro 发表于 2013-12-3 16:23:32

串口的接收 论坛已经有很多帖子了,看看就知道啥问题了
页: [1]
查看完整版本: 为什么我创建的UART处理函数会出现多次响应问题?