我想修改一个函数,以更明智的为我的目的;C上的ARM - 等待UART接收
int getc0 (void)
{
while ((U0LSR & 0x01) == 0); //Wait for character
return U0RBR;
}
上面的代码导致函数挂起,直到串行端口0上接收到一个字符,然后返回它。 我用这样的while循环来调用它;
while((str = getc0())!='\r'){
strcat(&route_buffer,&str);
}
所以现在我有它等待,直到接收通过串行端口返回车厢而在此之前的每个字符复制到缓冲区中。 现在我的问题是,目前我正在阅读数据时遇到一些问题,我无法确定问题出在哪里,无论哪种方式都无法正确识别返回车厢或换行符,但它正在接收某些输出! 我知道这一点,因为我已经将所有内容保存到一个文件中,但是要做到这一点,我必须在while循环中有一个i!= 5,并且只需要读取5个字符。如果我这样做到20它再次挂起并似乎不读取任何其他东西(即使我通过uart发送数据)
有没有办法我可以修改它读取X的时间量,然后继续函数的其余部分?
编辑:
char route_data[512], route_buffer[200];
编辑2:
char *str;
好吧,这里是我写在用户输入读取功能;
char* readInput(void){
userinput = 0;
str = 0;
while((str=getc0())!='\r'){
strcat(&userinput,&str);
}
return &userinput;
}
它被称为像这样;
strcat(config.nodeid,readInput());
它被称为很多,但这是我怎么称呼它的一个例子。然后我将它输出到一个文件,并且它可以在100%的时间内运行。
这可能有助于解释整个问题; 我有一块ARM板,连接到串口的无线模块(RX和TX)。上面的readInput函数用于读取远程登录到无线模块的用户的输入,并使ARM板读取用户的所有输入。 我现在想要实现的是在执行命令后从无线模块读取输入。使用printf语句,我可以通过将命令放入语句来执行命令。我需要做的是读取无线模块的输出,这是我遇到困难的地方。我得到了一些输出,但它非常有限,并不是预期的结果,但它显然是来自模块的。
请显示route_buffer的定义。 – Throwback1986 2011-03-10 21:07:41
如何定义'str'?如何定义'route_buffer'? 'str'应该是一个'int',与函数getc0()兼容,并且不能像这样将'int'传递给'strcat()'! – pmg 2011-03-10 21:09:44
我已编辑上述内容以包含所需信息。给我五分钟,我会详细说明为什么我已经完成了上述以及我已经做了什么来验证它。 – Draineh 2011-03-10 21:12:49