适用于stm32的命令行解释器shell
记录一下这个shell的应用说明
源码的地址:
https://gitee.com/somebug/atomlib
shell 层与硬件无关,有无操作系统都可以使用,适用于stm32等32位小端的单片机,支持历史纪录功能,tab 键补全命令,提供命令行参数解释函数,可以响应tab、backspace、上下左右编辑等功能,并提供一个简易版的vi 文本编辑功能。支持多交互接口,各个接口间数据流互不影响。
其中此文件夹中的文件都与硬件平台无关,但可能与编译平台有关。此库编译版本要在C99以上,或用GCC编译。根据不同的硬件平台分别写了不同的控制台demo, F1 文件夹的是STM32F1 相关的控制台, F4 则是 F4xx 系列的控制台,但是L1平台的我并没有调通,手上也没有这个板子,所以先放着。
文件说明:
avltree.c :平衡二叉树相关实现代码,在注册命令较多的时候可以启用平衡二叉树进行索引匹配。
getopt.c :有些编译环境,如 KEIL5 中,没有函数getopt() ,这是其源码,是我在网上找的。要是用 gcc 相关的编译平台可以 #include <unistd.h> 找到 getopt() 函数支持。
heaplib.c : 内存管理,其实这个是我原封不动从freertos 的 heap_4.c 拷过来的,在heaplib.h 提供了部分宏支持,可以脱离操作系统使用。
shell.c:命令行相关,支持 table 键补全,支持上下左右箭头响应,提供参数解析,历史纪录。支持多个交互,如串口,telnet,或者usb,可各自建立交互。
tasklib.c:协程控制器。有需要的话使用协程可以简化代码的编写。我把它模拟成一个操作系统。
ustdio.c:提供 printk 函数,重定义 printf 函数
vim.c:这是我仿照 linux 的 vi 写的一个建议的文本编辑器,依赖 shell ,可以实现简易的文本编辑。
F1/F4/L1:不同硬件平台的相关串口控制台实现,提供串口在线升级功能。
LittleFS: LittleFS 是一个用于 spi flash 的文件系统,先放这。
基本使用
使用这个库的基本功能只需要把 shell.c 、shell.h 、ustdio.c 、ustdio.h 和 kernel.h 这几个文件包含进文件工程里面即可。系统的使用可以大致分为以下几个步骤:
0.初始化硬件部分。
1.编写硬件对应的void puts(char * buf , uint16_t len) 发送函数。
2.shell_init(sign,puts)初始化输入标志和默认输出。
3.新建一个交互shellx 并初始化shell_input_init(&shellx,puts);
4.接收到一包数据后,调用shell_input(&shellx,buf,len)
以下用stm32cubemx新建串口工程实际说明。Mcu选择为STM32F103VET6;
配置 SYS -> DEBUG 为 Serial Wire :
配置 RCC -> HSE 为 Crystal