为什么我创建的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
你可能是发了多个字节吧。有可能第一字节到串口后,串口立即发消息给任务了。你可以打印出了看看
是的,我发送了AT+RE,但是难道不能够一次发送多个字节吗?
但是我发现 当我发送AT+RE ,程序进入到上面的uart处理函数后,依然能打印出AT+RE,这就说明系统一次将我的5个byte都接受到了。 Kacofree 发表于 2013-7-30 18:40
是的,我发送了AT+RE,但是难道不能够一次发送多个字节吗?
但是我发现 当我发送AT+RE ,程序进入到上面 ...
只是,处理一次后,程序会再一次进入了uart处理函数,而且同样的会打印出AT+RE,感觉是UART处理完后,没有清除uart 寄存器状态。。 消息处理里面,要用SourceDrop(src,size);函数才能把寄存器接收的数据清楚掉 鲲鹏之志 发表于 2013-7-30 19:08
消息处理里面,要用SourceDrop(src,size);函数才能把寄存器接收的数据清楚掉
我有加 ,在 GetInputLine(&s)函数(接受uart 数据)退出之前都有做这个动作。 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);
}
这种方式可以吗?我没有用过你这个方法。试试看。 路过看看。 路过学习了 串口的接收 论坛已经有很多帖子了,看看就知道啥问题了
页:
[1]