letter-shell 是纯 C 语言开发的嵌入式轻量命令行组件,是单片机项目调试首选开源工具,代码精简、占用资源极少,不需要操作系统就能直接运行,绝大多数 STM32、ESP、GD32 等 MCU 都能快速完成移植,能够直接通过串口命令调用工程内任意 C 函数,解决嵌入式设备缺少本地交互调试入口的痛点。绝大多数单片机项目调试都只能靠打印日志,无法直接调用函数、修改参数,一旦出现 bug 很难快速定位,而 letter-shell 依靠宏自动注册命令,新增调试指令不用修改原有代码,同时自带命令补全、权限管理、快捷键等完整能力,几百行代码就能实现完整串口终端,裸机、RTOS 环境都能稳定运行。开发者只需要完成读写函数对接、创建 shell 对象、注册自定义命令这三步,就能在设备上开启命令行交互,后续只需要一行宏代码就能新增调试命令,大幅提升嵌入式软件的调试效率。整体来看,letter-shell 凭借轻量化、低耦合、易扩展的优势,成为嵌入式 CLI 场景里实用性极强的开源组件,非常适合单片机产品做在线调试、参数配置与功能测试。
项目基础信息清单
- 开发语言:标准 C 语言,兼容 C++ 工程
- 开源协议:MIT 协议,可免费商用无版权限制
- 代码规模:核心代码约 2000 行,RAM 占用极低
- 运行环境:裸机单片机、FreeRTOS、RT-Thread 等实时系统
- 适配芯片:STM32、ESP 系列、GD32、RISC-V 等主流 MCU
- 最新稳定版本:letter-shell 3.1 版本,支持用户权限管理
核心功能列表
- Tab 键命令自动补全,支持命令历史记录
- 自定义快捷键,支持上下左右方向键操作
- 多用户分级权限管理,可限制普通用户指令范围
- 支持全局变量查看与修改,在线调试参数
- 命令自动注册,新增指令无需改动框架源码
- 支持命令参数解析,可向 C 函数传递多个入参
- 功能可裁剪,关闭不需要的模块进一步节省内存
完整移植操作步骤
- 获取源码,从 GitHub 或 Gitee 下载 letter-shell 源码,把 src 核心文件夹添加到项目工程里。
- 对接硬件读写接口,实现 shellRead 读取串口字符、shellWrite 发送字符两个底层函数,绑定单片机串口收发接口。
- 初始化 shell 对象,在 main 函数中创建 Shell 实例,绑定刚刚实现的读写回调函数。
- 注册自定义调试命令,使用 SHELL_EXPORT_CMD 宏,一行代码绑定命令名、执行函数与命令说明。
- 循环运行 shell 主函数,在 while 循环里调用 shellProcess 函数,持续解析串口输入指令。
- 编译下载,打开串口终端,输入 help 即可查看全部注册命令,完成调试环境搭建。
版本选择建议
- 只需要基础命令交互:选用 2.x 旧版本,代码更精简,资源占用更小。
- 需要权限管理、多用户、变量调试:直接使用 3.x 新版本,功能更完善。
【常见问题】
问题 1:letter-shell 在嵌入式单片机上运行,会占用多少内存资源?
回答 1:letter-shell 核心代码仅 2000 行左右,默认配置下 RAM 占用不到 4KB,关闭多余功能后内存占用还能进一步降低,绝大多数普通单片机都可以流畅运行,不会挤占业务代码的存储空间。
问题 2:使用 letter-shell 新增调试命令,需要修改原有框架代码吗?
回答 2:不需要修改框架源码,letter-shell 采用编译段自动注册机制,只需要在任意 C 文件中调用 SHELL_EXPORT_CMD 宏,就能自动完成命令注册,做到新增命令零侵入,代码维护更简单。
问题 3:裸机无操作系统的单片机,可以直接移植 letter-shell 吗?
回答 3:完全可以,letter-shell 不依赖任何操作系统,只需要对接串口读写函数,在主循环里调用命令解析函数,裸机环境就能稳定使用,STM32、GD32 等裸机项目都能直接移植。
【参考资料】
[2026-01-07](给 STM32F1 裸机程序移植个 Letter Shell 终端)电子工程世界论坛
[2025-12-15](这几个嵌入式软件开源项目值得深度复刻!)电子工程专辑
[2025-03-11](一个功能强大的嵌入式 shell)电子工程世界
[2020-07-16](第 2 期 | letter-shell,一个功能强大的嵌入式 shell)腾讯云开发者社区
【免责声明】
本文仅为 letter-shell 开源项目技术资讯整理,不构成项目开发选型建议;项目移植效果取决于硬件驱动与工程配置,不同 MCU 平台存在适配差异;letter-shell 源码遵循 MIT 开源协议,商用前请自行核对开源许可条款,项目后续版本功能变更请以官方仓库最新内容为准。
