概述

鉴于本控制器在调试时候可能会输出一些调试结果,为了不影响控制系统,建议控制命令使用中括号括起来

实现

在单片机编程中,以stm32为例: - 第一步:建立全局变量:

char cmd[8];     //命令缓冲区,存放[]中传来的命令,靠cjs进行位置累加字符串
u8 cjs=0;            //cjs:cmd命令计数
u8 iscmd=0;        //==1 表示处于[]内部,cmd记录中
u8 iscmdok=0;    //==1 表示有命令处理

这是一个标准的状态机算法,iscmd为状态,遇见undefined 状态机切换成记录模式,记录到cmd这个buf,一直记录到遇见符号] ,此时,记录完成的状态 iscmdok这个新的状态变为1,表示已经记录成功了一个新的语句;

void recvchar(u8 gc)
{    if (gc=='[')
    {    cjs=0;
        iscmd=1;
    }
    else if(gc==']')
    {    iscmd=0;
        iscmdok=1;
    }
    else if (iscmd==1)
    {    if (cjs<8) cmd[cjs]=gc;
        cjs++;
    }
}

注意,本程序只是示例,只能处理2位数,当然可以使用c语言的sscanf语句获取更复杂的数据格式

if(iscmdok==1)
{    if ((cmd[0]=='P') & (cmd[1]=='M'))
    {    n=cmd[3]-0x30;
        if ((cmd[4]>=0x30) & (cmd[4]<=0x39))
        {    n=n*10+cmd[4]-0x30;
                 cmd[4]=0;
        }
    //此时n为PWM,在此写对应的处理程序

    }
    iscmdok=0;
}

```