找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

查看: 4886|回复: 9

[ADK相关资料] 为什么我创建的UART处理函数会出现多次响应问题?

[复制链接]
连续签到天数:1天
签到总天数:1天
签到总奖励:2金币
发表于 2013-7-30 14:35:30 | 显示全部楼层 |阅读模式

马上注册,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册  

×
我用BC417 做串口通信,响应函数如下,但是不知道怎么回事,我用串口助手向BC417 发一次数据,但是会多次进入下面的这段响应程序。好奇怪。
      
static void uartHandler(Task task, MessageId id, Message data)
{  
   char s[MAX_GETINPUTLINE_LENGTH];
   int     func = 0;   
   uint16  supplment=0;
   
   switch(id)
   {
      case (MESSAGE_MORE_DATA):
           GetInputLine(&s[0]);
           /* */
           UpperCase(&s[0]);
           /* Remove tokens from input string, return 3 tokens */
           func = ReturnTokens(&s[0],&supplment);
           atCmdHandle(func,&supplment);      
           break;     
      default:
           break;
   }
}
楼主热帖
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!

暂无签到数据

发表于 2013-7-30 18:06:45 | 显示全部楼层
你可能是发了多个字节吧。有可能第一字节到串口后,串口立即发消息给任务了。你可以打印出了看看
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:1天
签到总奖励:2金币
 楼主| 发表于 2013-7-30 18:40:29 | 显示全部楼层
鲲鹏之志 发表于 2013-7-30 18:06
你可能是发了多个字节吧。有可能第一字节到串口后,串口立即发消息给任务了。你可以打印出了看看


是的,我发送了AT+RE,但是难道不能够一次发送多个字节吗?
但是我发现 当我发送AT+RE ,程序进入到上面的uart处理函数后,依然能打印出AT+RE,这就说明系统一次将我的5个byte都接受到了。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:1天
签到总奖励:2金币
 楼主| 发表于 2013-7-30 18:42:33 | 显示全部楼层
Kacofree 发表于 2013-7-30 18:40
是的,我发送了AT+RE,但是难道不能够一次发送多个字节吗?
但是我发现 当我发送AT+RE ,程序进入到上面 ...


只是,处理一次后,程序会再一次进入了uart处理函数,而且同样的会打印出AT+RE,感觉是UART处理完后,没有清除uart 寄存器状态。。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

暂无签到数据

发表于 2013-7-30 19:08:38 | 显示全部楼层
消息处理里面,要用SourceDrop(src,size);函数才能把寄存器接收的数据清楚掉
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:1天
签到总奖励:2金币
 楼主| 发表于 2013-7-30 19:28:41 | 显示全部楼层
鲲鹏之志 发表于 2013-7-30 19:08
消息处理里面,要用SourceDrop(src,size);函数才能把寄存器接收的数据清楚掉


我有加 ,  在 GetInputLine(&s[0])函数(接受uart 数据)退出之前都有做这个动作。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

暂无签到数据

发表于 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);


这种方式可以吗?我没有用过你这个方法。试试看。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:7天
签到总奖励:26金币
发表于 2013-12-3 10:32:25 | 显示全部楼层
路过看看。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:110天
签到总奖励:1169金币
发表于 2013-12-3 14:27:48 | 显示全部楼层
路过  学习了
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:2天
签到总天数:2320天
签到总奖励:64381金币
发表于 2013-12-3 16:23:32 | 显示全部楼层
串口的接收 论坛已经有很多帖子了,看看就知道啥问题了
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-5-7 01:28 , Processed in 0.998922 second(s), 23 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表