前言
shell作为一种强大的调试和交互工具,目前已经广泛应用于MCU上。本人平时用的多的还是RT-Thread操作系统自带的finsh组件,但是只有在使用RT-Thread的时候才能使用,裸机是不行的,如果裸机能使用请大家科普。
xcmd介绍
本文介绍一种很方便在裸机上运行的轻量级shell开源组件xcmd。
源码下载地址:https://gitee.com/two_salted_eggs/xcmd
xcmd是一款单片机命令行工具,移植十分方便,并且对flash与ram占用很小,旨在为单片机提供一个能够快速搭建且占用资源很小的命令行工具,可以大大加快单片机程序调试工作,它有一下几个优点。
- 移植十分简单
- 资源占用很小
- 支持历史记录
- 支持命令自动补全
- 支持注册快捷键
- 支持 xcmd_cmd_register()/xcmd_key_register方法注册命令或按键
- 支持 XCMD_EXPORT_CMD()/XCMD_EXPORT_KEY()方法直接导出命令或按键,不需要额外运行注册函数
支持的平台
- linux
- arduino
- stm32
- esp32
- qemu-stm32
测试过的串口软件
- (win/linux推荐)putty
- (win推荐)MobaXterm
- (linux端推荐)cu
- SecureCRT:请设置成Xterm模式
- Xshell
- nc(支持性很差)
- minicom(支持性很差)
支持的扩展功能
- 类linux风格的快捷键:ctr+left、ctr+right、ctr+a、ctr+e、ctr+u、ctr+k、ctr+l快捷键
- 支持字体、背景颜色显示
- 支持类linux的文件操作(Fatfs文件系统):ls、cd、rm、df、mv、mkdir、touch、rd、wr、cat
- 支持基于socket的udp server、udp client测试程序
xcmd移植
xcmd的移植非常简单,基本上只需要对接字符的输入和输出函数就能实现交互功能。
下面就从头开始将xcmd移植到MM32F5270开发板上。
- 准备一个串口功能ok的工程。
- 下载源代码(下载地址见文章最开始xcmd介绍)
- 添加源代码到自己准备的工程
需要添加的文件为:
添加完成后如下:
- 添加头文件路径到工程
- 对接字符输出和输入函数
注意,这里不要去改这两个函数名
- 调用xcmd初始化函数
在主函数中调用xcmd的初始化函数:
- 定义宏ssize
因为mdk里面没有对ssize进行类型定义,因此我们要自己定义:
- 编译下载体验
现在编译下载后就能体验xcmd自带的命令了,主要如下:
感兴趣的同学可以逐个试一下这些命令,这里就不再详细说明。
- 增加自定义命令控制led的亮灭
添加代码:
在主函数中进行初始化命令:
- 编译下载就能用命令来控制led了
使用led on命令来点亮led
使用led off来关闭led
总结
以上就是移植的全部过程,也达到是预设的效果(用命令控制led的亮灭),非常方便,给项目开发过程中的调试带来了很多的便利,极大提高了调试效率。