一个命令行接口的实现

在嵌入式开发中,我们经常使用PC向MCU发送一些指令,MCU的串口向PC端回复一些内容,这是典型的上位机和下位机的通讯模式。在PC端我们经常使用串口调试助手、SecureCRT等上位机软件向MCU发送指令,下面我们就以SecureCRT为例(在键盘中按下Enter键,发送0x0D或者0x0D、0x0A),在MCU端简单实现一个函数,完成一个命令行。

//定义命令的最大长度
#define CMD_LENGTH_MAX 32
static char cmd_buff[CMD_LENGTH_MAX];
static char char_rec_index = 0;
static bool time_to_execute = false;

void handleChar(char chr)
{
    cmd_buff[char_rec_index] = chr;

    switch(chr)
    {
        //new line
        case 0x0A:
            return;

        //BackSpace
        case 0x08:
            if(char_rec_index > 0)
            {
                char_rec_index--;
                char dat[3] = {0x08,0x20,0x08};
                HAL_UART_Transmit(&huart1, dat, 3, 10);
            }
            return;

        //Enter
        case 0x0D:
            time_to_execute = true;
            printf("\r\n");
            break;

        default:
            //回显
            HAL_UART_Transmit(&huart1, chr, 1, 10);
            break;
    }

    if(char_rec_index >= CMD_LENGTH_MAX)
        char_rec_index = 0;
    else
        char_rec_index++;
}

上面的程序中,cmd_buff数组存储了上位机发送过来的字符,char_rec_index记录了已经收到的字符的个数,time_to_execute指示是否收到了上位机按下Enter键,以供其他函数查询是否应该去执行命令。char_rec_index和time_to_execute应该在其他函数中清零。HAL_UART_Transmit(&huart1, dat, 3, 10)使用MCU的uart1发送保存在dat中的3个数据,超时时间为10ms。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值