嵌入式调试利器:STM32F429移植letter-shell实战
大家好,我是知微。
在上一篇教程中,我们已经完成了:
- 使用CubeMX配置UART7串口通信
- 实现了printf重定向到串口输出
- 配置了FreeRTOS实时操作系统
今天将带你实操,如何在现有项目中集成letter-shell命令行工具,为嵌入式系统添加强大的命令行交互功能。
letter-shell是一款轻量级嵌入式命令行工具,具有以下特点:
- 支持动态注册函数为命令
- 自动参数解析
- Tab补全功能
- 历史记录功能
- 支持裸机轮询/中断和RTOS任务模式
letter-shell源码下载
- gitee仓库:https://gitee.com/zhang-ge/letter-shell
- github仓库:https://github.com/NevermindZZT/letter-shell
- 我使用的github仓库的v3.1.2版本
- 仓库的readme.md文件,有比较详细的功能使用说明,所以这篇文章,只演示比较常用的移植,和添加自己命令的过程,如果有用到其他功能,可以自行探索。
lettershell文件简单说明
demo文件夹
这里面是一些示例,如果有用到,可以参考。比如我这里用了FreeRTOS,等会儿就可以参考stm32-freertos的内容。
doc文件夹
这里面就是一些图片
extensions文件夹
- 这里是一些扩展,可根据实际情况使用
cpp_support
,用于扩展letter shell
,使其可以在cpp环境中生效fs_support
,用于实现letter shell对常见文件系统操作的支持game
,一个仅供娱乐的组件,移植了几个命令行的游戏log
, 用于嵌入式系统的日志打印工具,可以为日志定义不同的级别shell_enhance
,是letter shell 3.0
上用于增强shell功能的组件telnet
,基于letter shell
运行的一个telnet
服务端,可以在一些具有网络能力的嵌入式环境中使用
src文件夹
- 这些文件是核心实现代码
shell.h
- 定义了Shell系统的核心数据结构和接口shell.c
- 实现了Shell系统的主要功能,包括命令解析、执行和输入处理shell_cfg.h
- 包含了Shell系统的各种配置选项和宏定义shell_cmd_list.c
- 在不使用命令导出模式时,定义静态命令表和按键绑定shell_ext.h
- 定义了Shell扩展功能的接口和数据类型 shell_ext.h:1-49shell_ext.c
- 实现了Shell的扩展功能,主要处理参数解析和函数调用shell_companion.c
- 实现了Shell伴生对象系统,用于将扩展对象与Shell实例关联
tools文件夹
- 这里就一个文件,用于扫描指定目录中所有使用SHELL_EXPORT_XXX宏导出的命令
- 使用演示
需要移植的文件
src
文件夹内所有的文件都会用到- 因为我用了
FreeRTOS
,也用到了demo\stm32-freertos\
文件夹内的所有文件 - 在项目中创建一个
lettershell
文件,先后把src
和stm32-freertos
目录下和文件都拷贝过来,会提示shell_cfg.h已存在,直接替换就好了。
添加文件到工程中
- 添加lettershell相关的c文件
- 添加lettershell头文件所在目录