2. ESP32 移植命令行工具 xcmd(类ssh)

1.简介

xcmd是一款单片机命令行工具,移植十分方便,并且对flash与ram占用很小,旨在为单片机提供一个能够快速搭建且占用资源很小的命令行工具,可以大大加快单片机程序调试工作,它有一下几个优点。

  1. 移植十分简单
  2. 资源占用很小
  3. 支持历史记录
  4. 支持命令自动补全
  5. 支持注册快捷键
  6. 支持 xcmd_cmd_register()/xcmd_key_register方法注册命令或按键
  7. 支持 XCMD_EXPORT_CMD()/XCMD_EXPORT_KEY()方法直接导出命令或按键,不需要额外运行注册函数

2. 效果展示

在这里插入图片描述

3.开源路径

xcmd 已经有在esp32上移植的例子

https://gitee.com/two_salted_eggs/xcmd.git

4. 编译xcmd自带的esp32例程

cd xcmd/example/esp_idf
idf.py build

编译好后下载到我们的esp32板子中,连接串口我们可以到xcmd的信息
在这里插入图片描述
此时我们按下tab键或者输入help,会打印如下信息
在这里插入图片描述
图中都是xcmd自带的一些命令;

4. 移植

xcmd 已经有在esp32上移植的例子了,我们就来分析一下xcmd在esp32上如何移植;移植的代码主要时main.c中:

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "xcmd.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "test.h"

int cmd_get_char(unsigned char *ch)				#给xcmd提供esp32的输出接口
{
    *ch = getc(stdin);
    return 1;
}

int cmd_put_char(unsigned char ch)				#给xcmd提供esp32的输出接口
{
    putchar(ch);
    return 1;
}

void app_main(void)
{
    xcmd_init(cmd_get_char, cmd_put_char);		#将输入、输出接口注册给xcmd
    test_cmd_init();							#这个接口中提供了一些测试命令
    test_keys_init();							#这个接口中提供了部分键盘操作接口
    
    while(1)
    {
        xcmd_task();							#xcmd执行接口
        vTaskDelay(pdMS_TO_TICKS(10));
    }
}

5. 注册我们自己命令

移植xcmd的目的就是增加我们命令,方便我们调试设备;接下来就看看如何添加命令:


#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "xcmd.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "test.h"

int cmd_get_char(unsigned char *ch)
{
    *ch = getc(stdin);
    return 1;
}

int cmd_put_char(unsigned char ch)
{
    putchar(ch);
    return 1;
}

static int test1(int argc, char* argv[])	//增加测试命令test1 的处理函数
{
    xcmd_print(TX_GREEN    "test1 txt_color = GREEN  \r\n"   TX_DEF);	//打印绿色字体
    return 0;
}

static int test2(int argc, char* argv[])	//增加测试命令test2 的处理函数
{
    xcmd_print(TX_RED      "test2 txt_color = RED    \r\n"   TX_DEF);	//打印红色字体
    return 0;
}

static xcmd_t tcmds[] = 				//将命令 和 处理函数关联起来
{
    {"test1", test1, "print hello 1", NULL},
    {"test2", test2, "print hello 1", NULL},
};


void app_main(void)
{
    xcmd_init(cmd_get_char, cmd_put_char);
    test_cmd_init();
    test_keys_init();
    xcmd_cmd_register(tcmds, sizeof(tcmds)/sizeof(xcmd_t));  //将命令注册到 xcmd 中
    while(1)
    {
        xcmd_task();
        vTaskDelay(pdMS_TO_TICKS(10));
    }
}

编译下载到板子后的串口效果:

在这里插入图片描述
展示命令执行效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值