单片机shell,嵌入式shell

xcmd

一种可以在单片机上允许的shell软件,提供类linux终端的操作感觉。并且移植十分简便,只需要在初始化的时候提供输入输出函数即可。
xcmd源码gitee

效果展示

在这里插入图片描述

介绍
介绍

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

  1. 移植十分简单
  2. 资源占用约8K rom 1K ram
  3. 支持历史记录
  4. 支持命令自动补全
  5. 支持注册快捷键
  6. 支持xcmd_cmd_register()/xcmd_key_register方法注册命令或按键
  7. 支持XCMD_EXPORT_CMD()/XCMD_EXPORT_KEY()方法直接导出命令或按键,不需要额外运行注册函数
支持的平台
  1. linux
  2. arduino
  3. stm32
  4. esp32
  5. qemu-stm32
测试过的串口软件
  1. (win/linux推荐)putty
  2. (win推荐)MobaXterm
  3. (linux端推荐)cu
  4. SecureCRT:请设置成Xterm模式
  5. Xshell
  6. nc(支持性很差)
  7. minicom(支持性很差)
支持的扩展功能
  1. 类linux风格的快捷键:ctr+left、ctr+right、ctr+a、ctr+e、ctr+u、ctr+k、ctr+l快捷键
  2. 支持字体、背景颜色显示
  3. 支持类linux的文件操作(Fatfs文件系统):ls、cd、rm、df、mv、mkdir、touch、read、write
  4. 支持基于socket的udp server、udp client测试程序
移植
  • 移植十分简单,可在example中查看各平台移植结果
  1. 在初始化的时候提供字符输入输出函数即可
  2. 从example中拷贝一个xcmd_confg.h到自己的项目
/* 例如移植到Arduino平台 */
int cmd_get_char(uint8_t *ch)
{
    if(Serial.available())
    {
        *ch =  Serial.read();
        return 1;
    }
    else
    {
        return 0;
    }
}

int cmd_put_char(uint8_t ch)
{
    Serial.write(ch);
    return 1;
}

void setup() {
    Serial.begin(115200);
    xcmd_init(cmd_get_char, cmd_put_char);
}

void loop() {
    
    xcmd_task();
}
配置

配置xcmd_config.h

注意: 如果不知道如何修改连接脚本,建议不要使能ENABLE_XCMD_EXPORT。不使能ENABLE_XCMD_EXPORT的情况下有更好的兼容性移植更加简单

#define XCMD_LINE_MAX_LENGTH          (128)           /* 命令行支持的最大字符数 */
#define XCMD_HISTORY_MAX_NUM          (16)            /* 支持的历史记录个数, 这个参数对内存的影响很大,建议arduino设置为0,0为不支持 */
#define XCMD_PARAM_MAX_NUM            (8)             /* 支持输入的参数个数 */
// #define XCMD_DEFAULT_PROMPT           "->"            /* 提示符 */
// #define XCMD_DEFAULT_PROMPT_CLOLR     TX_GREEN        /* 提示符颜色 */
// #define ENABLE_XCMD_EXPORT                            /* 需要修改lds,启用后支持XCMD_EXPORT_CMD和XCMD_EXPORT_KEY方法导出命令 */
使用说明
xcmd_register()方法注册自定义命令
static int cmd_echo(int argc, char* argv[])
{
    if(param_check(1, argc, argv))
	{
    	printf("%s\r\n", argv[1]);
	}
    return 0;
}

static xcmd_t cmds[] = 
{
    {"echo", cmd_echo, "print anything", NULL},
};

void test_cmd_init(void)
{
    xcmd_cmd_register(cmds, sizeof(cmds)/sizeof(xcmd_t));
}
xcmd_key_register() 方法注册自定义快捷键
int cmd_ctr_a(void* pv)
{
    printf("this is ctr+a\n");
}

static xcmd_key_t user_keys[] = 
{
    {KEY_CTR_A, cmd_ctr_a, "ctr+a", NULL},
};

void test_keys_init(void)
{
    xcmd_key_register(user_keys, sizeof(user_keys)/sizeof(xcmd_key_t));
}
XCMD_EXPORT_CMD()方法注册自定义命令,需要使能宏ENABLE_XCMD_EXPORT并修改lds,见example/stm32/qemu/demos/main.ld
static int cmd_echo(int argc, char* argv[])
{
    if(param_check(1, argc, argv))
	{
    	printf("%s\r\n", argv[1]);
	}
    return 0;
}
XCMD_EXPORT_CMD(echo, cmd_echo, "print anything")
XCMD_EXPORT_KEY() 方法注册自定义快捷键, 需要使能宏ENABLE_XCMD_EXPORT并修改lds,见example/stm32/qemu/demos/main.ld
int cmd_ctr_a(void* pv)
{
    printf("this is ctr+a\n");
}
XCMD_EXPORT_KEY(KEY_CTR_A, cmd_ctr_a, "ctr+a")
地址

xcmd

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值