有了前面的准备工作就剩写代码了。
u16 reccnt = 0;//新帧字节个数
u16 cnt =0;//第4部分提到的cnt,一旦收到回车,cnt就清零
if (收到新帧)
{
获得新帧的 个数recCnt;
CBUSART_Read(USARTx, recMem, 10); //新帧放到 recMem里面;
if ((cnt + recCnt) < sizeof(multiMem)) { // if (收到字符个数不会导致multiMem溢出)
memcpy(&multiMem[cnt], recMem, recCnt);
USART_Write(USARTx, &multiMem[cnt], recCnt);
cnt = cnt + recCnt;
if (收到回车0x0D)或者(收到回车0x0D+0X0A) {
if ((multiMem[cnt - 1] == 0x0D)) {
cnt = cnt;
}
else {
cnt = cnt - 1;
}
/*-----------------------------------------------------------------------------------------------*/
if (((multiMem[cnt - 2] == '?') && (cnt == 2)) { //若收到?命令
__IO uint16_t timeout = 1000;
while ((0 != Printf(USARTx, "\r\n help ? id info"\
"\r\n time hw ver"\
"\r\nmicroC>")) && (timeout--));
}
esleif ()//收到某命令
elseif ()
else {
if (cnt > 1) {
Printf(USARTx, "\r\nCommand not found..."\
"\r\nmicro>");
}
else {
Printf(USARTx, "\r\nmicro>");
}
}
/*-----------------------------------------------------------------------------------------------*/
cnt =0;
}
else {
Printf(USARTx, "\r\nCommand not found..."\ "\r\nmicro>");
}
}
|