1. letter-shell简介
letter shell是一个C语言编写的,可以嵌入在程序中的嵌入式shell,主要面向嵌入式设备。
说得直白点他就是一个命令行交互软件,可以读取用户输入的命令,找到并执行命令对应的函数。
letter-shell的功能十分强大,目前主要功能有:
- 命令自动补全
- 快捷键功能定义
- 命令权限管理
- 用户管理
- 变量支持
- 代理函数和参数代理解析
下面是letter-shell运行起来的效果图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nvpQ8rVr-1671330662218)(../picture/image-20221211200222990.png)]](https://i-blog.csdnimg.cn/blog_migrate/0287590be8b40f805d2c42945101621b.png)
该项目代码遵循MIT协议,作者的代码仓库如下:
2. 获取源码
我们是要把letter-shell,移植到极海APM32F4的MCU上面运行,所以我们需要获取到极海的APM32F4的SDK包,以及letter-shell的源码。
-
获取 APM32F4 SDK :
-
letter-shell 开源项目源码:
可以到简介,给出的作者的github官网下载。如果因为网速的原因,也可以到gitee上面下载,gitee也有很多关于letter-shell的源码,下面给出其中一个仓库地址:
3. APM32F4上移植letter-shell过程
3.1 准备一份可以通过串口打印信息的工程
我们把官网的APM32F4 SDK下载下来后,然后我们选择一个串口中断的例程,如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KzslbeYm-1671330662220)(../picture/image-20221211203213382.png)]](https://i-blog.csdnimg.cn/blog_migrate/9fdfd0d046319f27d450a32dbfcb3a48.png)
然后,把这个例程不需要的代码去掉,只留下串口相关的初始化代码,还有printf重定向的代码就行了。
编译下载到板子之后,可以看到串口正常输出打印信息,就说明代码正常。
3.2 向工程添加letter-shell源码
letter-shell源码目录如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wf5V2gfh-1671330662220)(../picture/image-20221211205110255.png)]](https://i-blog.csdnimg.cn/blog_migrate/5d5aaa22ab9aa415a24832fcf05a5391.png)
我们只需要把src目录下的源码复制到对应工程目录下即可。
我这里就复制到对应工程的 \Middlewares\letter-shell 目录下。
3.3 在keil-MDK中添加源码和文件包含路径
打开keil的项目管理窗口,然后添加我们刚刚复制的letter-shell的源码目录src的所有文件:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S8zZ4UbI-1671330662220)(../picture/image-20221211205606464.png)]](https://i-blog.csdnimg.cn/blog_migrate/28a7ac071ab9ad7b031788c32923bd54.png)
添加文件之后,再添加letter-shell的文件包含路径:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hu2ffdqo-1671330662221)(../picture/image-20221211205843867.png)]](https://i-blog.csdnimg.cn/blog_migrate/7d4be83d87b9b8988147a9693fe7e9e4.png)
点击OK,退出。这个时候源码相当于添加完成,这是编译是可以通过的,没警告和错误。但是还不能正常使用letter-shell,因为还没有添加移植的接口函数。
3.4 添加shell_port.c文件,提供读写接口函数
我们还需要提供letter-shell的读写接口函数,这样letter-shell才能通过串口输出字符,或者通过串口获取输入字符。
在letter-shell的源码目录下,demo目录中,已经提供了基于stm32 freeRTOS的读写接口,我们可以把该文件复制到我们的工程目录下,然后在该文件基础上进行改写:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vuGZoQJ7-1671330662221)(../picture/image-20221211210955325.png)]](https://i-blog.csdnimg.cn/blog_migrate/db9874a37ad57db3c729cc1f79785956.png)
1、在shell_port.c中,我们主要实现shell的写函数即可,代码如下:
/**
* @brief 用户shell写
*
* @param data 数据
* @param len 数据长度
*
* @return short 实际写入的数据长度
*/
short userShellWrite(char *data, unsigned short len)
{
unsigned short temp

本文详细介绍了如何将Letter-Shell嵌入式shell移植到极海APM32F4 MCU,包括源码获取、移植过程、配置文件定制以及自定义命令的编写和使用。重点在于串口通信的设置和shell核心功能的整合。
最低0.47元/天 解锁文章
950

被折叠的 条评论
为什么被折叠?



