void uart_process(U8 u8)
{
if(uart_state == CMD_NO)
{
if(u8 == STX_CMD)
{
uart_state = CMD_START;
}
}
else if(uart_state == CMD_START)
{
switch(cmd_state)
{
case NO_CMD:
cmd_state = u8;
break;
case COST_CMD:
//解析存储有用数据到相应数据结构中
//进行CRC校验
……
uart_state = CMD_END;
cmd_state = NO_CMD;
CRC = 0;
break;
……
}
……
}
else if(uart_state == CMD_END)
{
uart_state = CMD_NO;
if(u8 == ETX_CMD)
{
//接受完毕
//可以考虑抛出一个消息main函数循环中进行响应处理。
}
}
}
|