|
发表于 2011-1-21 10:51:22
|
显示全部楼层
// 功能:通过UART接收字符串,回显,退格<Backspace>修改,回车<Enter>结束
// 参数:*s保存接收数据的缓冲区,只接收可打印字符(ASCII码32~127)
// size是缓冲区*s的总长度,要求size >= 2(包括末尾'\0',建议用sizeof()来获取)
// 返回:接收到的有效字符数目
int uartGets(eUART_ch_t uartCh, cmdstr* pcmdstruct)
{
char c,size;
char* pchar;
// pcmdstruct->str[0] = '\0';
size=sizeof(pcmdstruct->str);
if (size < 2) return(0);
size--;
//pcmdstring->UartProStart=0;
//for (;;)
if( UARTReadByte(uartCh,&c)==0) //3??? // 接收1个字符
{
//Uart1_Printf("get %c\r\n",c);
UARTWriteByte(uartCh,c);
}// 回显输入的字符
else
{
// Uart1_Printf("timer out\r\n");
return 0;
}
if (c == '\b') // 遇退格<Backspace>修改
{
if (pcmdstruct->num > 0)
{
pcmdstruct->num--;
(pcmdstruct->str[pcmdstruct->num]) = '\0';
Uart1_Printf(" \b"); // 显示空格和退格<Backspace>
}
}
if (c == '\r') // 遇回车<Enter>结束
{
Uart1_Printf("\r\n"); // 显示回车换行<CR><LF>
pcmdstruct->UartProStart=1;
pcmdstruct->num=0;
}
if (pcmdstruct->num < size) // 如果小于长度限制
{
if (isprint_char(c)) // 如果接收到的是可打印字符
{
//Uart_Printf("\r\nprint_ok!\r\n");
(pcmdstruct->str[pcmdstruct->num]) = c; // 保存接收到的字符到缓冲区
pcmdstruct->num++;
pcmdstruct->str[pcmdstruct->num] = '\0';
}
}
return(pcmdstruct->num); // 返回接收到的有效字符数目
} |
|