给STM32F1裸机程序移植个Letter Shell终端
github:https://github.com/NevermindZZT/letter-shell
gitcode:https://gitcode.com/gh_mirrors/le/letter-shell
网上冲浪的时候发现个好东西,Letter Shell,一个C语言编写的,专门给嵌入式终端用的壳子,
支持命令自动补全,看起来效果还不错,简单移植过来体验体验,分享下程序移植的过程。

1、先下载源代码到本地,源码文件如下
demo目录下,是几个不同芯片平台的移植参考例程,支持ESP、STM32、X86等等
doc目录下,是关于Letter Shell自身的一些介绍,感兴趣的可以看看
extensions目录下,是一些扩展命令,还放了终端可以玩的游戏,具体我也没研究,
src目录下,是我们要使用的源代码,这个只最重要的,
tool目录下,使用python写的测试脚本,

2、将代码复制到STM32的工程目录下,并将src目录下的文件添加到工程中,添加完之后工程目录如下

3、然后在工程的配置选项中,添加C/C++代码需要引用的头文件,这个用过Keil的都懂,

4、然后我们需要给Leter Shell添加几个接口变量,用来接收输入的命令,及要输出的信息,如下图
此处我们可以保留调试串口原有的fputc函数,这样我们可以继续使用printf输出信息,这个跟letter Shell功能不冲突
其中shellBuffer是letter shell运行的缓冲区,默认分配512字节,Shell shell是对Shell结构体的实例化,这样才能正确使用shell终端。

5、接下来我们需要给Leter Shell添加几个接口函数,用来处理我们的命令输入与输出,如下图

6、最后我们在主函数中直接调用Letter Shell初始化函数即可,记得要引用letter shell的头文件哦,如下如
因为程序是裸机运行,Shell输入的命令回调函数直接放到了串口中断中,所以并不需要在主循环中调用,测试命令交互流畅度还是挺不错的。

7、如果我们需要添加自己的函数命令,只需要使用宏接口指定“命令与接口函数即可”,如下图我添加了查看系统复位原因,与控制系统复位的函数;
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), func, func, describe);

8、调试没问题后,Letter Shell在串口终端中的运行效果如下,可以看到我们依次运行的help、resetFlag、sysclk命令都可以正常输出

9、最后我们通过脚本分析一下串口及Letter Shell占用的资源,RAM仅有800字节,Flash也只有不到8K而已。


浙公网安备 33010602011771号