# letter shell
![version](https://img.shields.io/badge/version-2.0.8-brightgreen.svg)
![build](https://img.shields.io/badge/build-2020.01.14-brightgreen.svg)
![build](https://img.shields.io/badge/license-MIT-brightgreen.svg)
一个体积极小的嵌入式shell
- [letter shell](#letter-shell)
- [功能](#%e5%8a%9f%e8%83%bd)
- [移植说明](#%e7%a7%bb%e6%a4%8d%e8%af%b4%e6%98%8e)
- [使用方式](#%e4%bd%bf%e7%94%a8%e6%96%b9%e5%bc%8f)
- [函数定义](#%e5%87%bd%e6%95%b0%e5%ae%9a%e4%b9%89)
- [main函数形式](#main%e5%87%bd%e6%95%b0%e5%bd%a2%e5%bc%8f)
- [普通C函数形式](#%e6%99%ae%e9%80%9ac%e5%87%bd%e6%95%b0%e5%bd%a2%e5%bc%8f)
- [在函数中获取当前shell对象](#%e5%9c%a8%e5%87%bd%e6%95%b0%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%bd%93%e5%89%8dshell%e5%af%b9%e8%b1%a1)
- [命令定义](#%e5%91%bd%e4%bb%a4%e5%ae%9a%e4%b9%89)
- [命令导出方式](#%e5%91%bd%e4%bb%a4%e5%af%bc%e5%87%ba%e6%96%b9%e5%bc%8f)
- [命令表方式](#%e5%91%bd%e4%bb%a4%e8%a1%a8%e6%96%b9%e5%bc%8f)
- [组合按键](#%e7%bb%84%e5%90%88%e6%8c%89%e9%94%ae)
- [shell变量](#shell%e5%8f%98%e9%87%8f)
- [导出变量](#%e5%af%bc%e5%87%ba%e5%8f%98%e9%87%8f)
- [读取变量](#%e8%af%bb%e5%8f%96%e5%8f%98%e9%87%8f)
- [修改变量](#%e4%bf%ae%e6%94%b9%e5%8f%98%e9%87%8f)
- [变量作为命令参数](#%e5%8f%98%e9%87%8f%e4%bd%9c%e4%b8%ba%e5%91%bd%e4%bb%a4%e5%8f%82%e6%95%b0)
- [shell密码](#shell%e5%af%86%e7%a0%81)
- [建议终端软件](#%e5%bb%ba%e8%ae%ae%e7%bb%88%e7%ab%af%e8%bd%af%e4%bb%b6)
- [更新日志](#%e6%9b%b4%e6%96%b0%e6%97%a5%e5%bf%97)
## 功能
- 命令自动补全,使用tab键补全命令
- 命令长帮助,使用help [command]显示命令长帮助
- 长帮助补全,输入命令后双击tab键补全命令长帮助指令
- 快捷键,支持使用Ctrl + A~Z组合按键直接调用函数
- shell变量,支持在shell中查看和修改变量值,支持变量作为命令参数
- 登录密码,支持在shell中使用登录密码,支持超时自动锁定
## 移植说明
1. 定义shell对象
```C
SHELL_TypeDef shell;
```
2. 定义shell读,写函数,函数原型如下
```C
/**
* @brief shell读取数据函数原型
*
* @param char shell读取的字符
*
* @return char 0 读取数据成功
* @return char -1 读取数据失败
*/
typedef signed char (*shellRead)(char *);
/**
* @brief shell写数据函数原型
*
* @param const char 需写的字符
*/
typedef void (*shellWrite)(const char);
```
3. 调用shellInit进行初始化
```C
shell.read = shellRead;
shell.write = shellWrite;
shellInit(&shell);
```
4. 调用(建立)shell任务
对于运行在操作系统的情况,建立`shellTask`任务(确保sell_cfg.h中的配置无误),任务参数为shell对象
```C
OsTaskCreate(shellTask, &shell, ...);
```
对于裸机环境,在主循环中调用`shellTask`,或者在接收到数据时,调用`shellInput`
5. 说明
- 对于中断方式使用shell,不用定义`shell->read`,但需要在中断中调用`shellInput`
- 对于在无操作系统环境下,可以使用查询的方式,使能```SHELL_UISNG_TASK```,然后在循环中不断调用shellTask
- 对于使用操作系统的情况,使能```SHELL_USING_TASK```和```SHEHLL_TASK_WHILE```宏,然后创建shellTask任务
- 打印函数返回值,使能```SHELL_DISPLAY_RETURN```宏,返回值均作为整型数据打印
6. 其他配置
- 定义宏```SHELL_GET_TICK()```为获取系统tick函数,使能tab双击操作,用户长帮助补全
7. 配置宏
shell_cfg.h文件中包含了所有用于配置shell的宏,在使用前,需要根据需要进行配置
| 宏 | 意义 |
| -------------------------- | ------------------------------ |
| SHELL_USING_TASK | 是否使用默认shell任务 |
| SHELL_USING_CMD_EXPORT | 是否使用命令导出方式 |
| SHELL_DISPLAY_RETURN | 是否显示命令调用函数返回值 |
| SHELL_TASK_WHILE | 是否使用默认shell任务while循环 |
| SHELL_AUTO_PRASE | 是否使用shell参数自动解析 |
| SHELL_LONG_HELP | 是否使用shell长帮助 |
| SHELL_COMMAND_MAX_LENGTH | shell命令最大长度 |
| SHELL_PARAMETER_MAX_NUMBER | shell命令参数最大数量 |
| SHELL_HISTORY_MAX_NUMBER | 历史命令记录数量 |
| SHELL_DOUBLE_CLICK_TIME | 双击间隔(ms) |
| SHELL_GET_TICK() | 获取系统时间(ms) |
| SHELL_DEFAULT_COMMAND | shell默认提示符 |
| SHELL_MAX_NUMBER | 管理的最大shell数量 |
| SHELL_USING_AUTH | 是否使用密码功能 |
| SHELL_USER_PASSWORD | 用户密码 |
| SHELL_LOCK_TIMEOUT | shell自动锁定超时 |
## 使用方式
### 函数定义
letter shell 支持两种形式的函数定义方式,形如main函数定义的```func(int argc, char *agrv[])```以及形如普通C函数的定义```func(int i, char *str, ...)```,这两种方式目前不可共存,只能选择其中的一种,通过宏```SHELL_AUTO_PRASE```选择
#### main函数形式
使用此方式,一个函数定义的例子如下:
```C
func(int argc, char *agrv[])
{
printf("%dparameter(s)\r\n", argc);
for (char i = 1; i < argc; i++)
{
printf("%s\r\n", argv[i]);
}
}
SHELL_EXPORT_CMD(func, func, test)
```
终端调用
```sh
letter>>func "hello world"
2 parameter(s)
hello world
```
#### 普通C函数形式
使用此方式,shell会自动对参数进行转化处理,目前支持二进制,八进制,十进制,十六进制整形,字符,字符串的自动处理,如果需要其他类型的参数,请使用字符串的方式作为参数,自行进行处理,例子如下:
```C
func(int i, char ch, char *str)
{
printf("input int: %d, char: %c, string: %s\r\n", i, ch, str);
}
SHELL_EXPORT_CMD(func, func, test)
```
终端调用
```sh
letter>>func 666 'A' "hello world"
input int: 666, char: A, string: hello world
```
#### 在函数中获取当前shell对象
shell采取一个静态数组对定义的多个shell进行管理,shell数量可以修改宏```SHELL_MAX_NUMBER```定义(为了不使用动态内存分配,此处通过数据进行管理),从而,在shell执行的函数中,可以调用```shellGetCurrent()```获得当前活动的shell对象,从而可以实现某一个函数在不同的shell对象中发生不同的行为,也可以通过这种方式获得shell对象后,调用```shellDisplay(shell, string)```进行shell的输出
### 命令定义
letter shell 支持使用命令导出方式和命令表方式进行命令的添加,定义,通过宏```SHELL_USING_CMD_EXPORT```控制
命令导出方式支持keil,IAR(未测试)以及GCC
### 命令导出方式
letter shell 支持在函数体外部,采用定义常量的方式定义命令,例如```SHELL_EXPORT_CMD_EX(help, shellHelp, command help, help [command] --show help info of command);```,或者```SHELL_EXPORT_CMD(help, shellHelp, command help);```
对于使用keil进行编译,需要在keil的target option中增加--keep shellCommand*,防止定义的命令被优化掉
使用GCC编译时,需要在ld文件中的只读数据区(建议)添加:
```ld
_shell_command_start = .;
KEEP (*(shellCommand))
_shell_command_end = .;
```
### 命令表方式
- 当使用其他编译器时,暂时不支持使用类似keil中命令导出的方式,需要在命令表中添加
```C
const SHELL_CommandTypeDef shellDefaultCommandList[] =
{
SHELL_CMD_ITEM_EX(help, shellHelp, command help, help [command]
没有合适的资源?快使用搜索试试~ 我知道了~
2023年电子设计大赛E题,基于STM32F103C8T6,使用CubeMX+EIDE(VS Code)开发.zip
共130个文件
h:62个
c:26个
json:8个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 174 浏览量
2023-08-22
23:33:56
上传
评论 5
收藏 687KB ZIP 举报
温馨提示
全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的同学可以用来学习提升和参考。程序均是实战案例,经过测试可直接运行。 全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的同学可以用来学习提升和参考。程序均是实战案例,经过测试可直接运行。
资源推荐
资源详情
资源评论
收起资源包目录
2023年电子设计大赛E题,基于STM32F103C8T6,使用CubeMX+EIDE(VS Code)开发.zip (130个子文件)
stm32f1xx_hal_tim.c 238KB
stm32f1xx_hal_uart.c 132KB
stm32f1xx_hal_tim_ex.c 78KB
stm32f1xx_hal_rcc.c 48KB
stm32f1xx_hal_flash_ex.c 35KB
shell.c 33KB
stm32f1xx_hal_rcc_ex.c 29KB
stm32f1xx_hal_flash.c 28KB
stm32f1xx_hal_dma.c 27KB
stm32f1xx_hal_gpio.c 20KB
stm32f1xx_hal_pwr.c 20KB
stm32f1xx_hal.c 20KB
stm32f1xx_hal_cortex.c 18KB
stm32f1xx_hal_exti.c 15KB
system_stm32f1xx.c 14KB
stm32f1xx_it.c 12KB
mpu6050.c 11KB
main.c 7KB
shell_ext.c 6KB
tim.c 6KB
stm32f1xx_hal_gpio_ex.c 4KB
usart.c 3KB
syscalls.c 3KB
sysmem.c 3KB
stm32f1xx_hal_msp.c 2KB
gpio.c 2KB
stm32f103c8_blue_pill.cfg 938B
stm32f103c8_blue_pill bak.cfg 914B
.clang-format 761B
.clang-format 749B
Test-CubeMX.code-workspace 1KB
.cproject 24KB
.gitattributes 66B
.gitignore 182B
.gitignore 151B
stm32f103xb.h 823KB
stm32_hal_legacy.h 230KB
core_cm33.h 169KB
core_armv8mml.h 162KB
stm32f1xx_ll_tim.h 160KB
core_cm7.h 142KB
stm32f1xx_hal_tim.h 120KB
core_cm4.h 119KB
core_cm3.h 107KB
core_sc300.h 106KB
core_cm23.h 100KB
stm32f1xx_ll_usart.h 97KB
stm32f1xx_hal_rcc_ex.h 97KB
core_armv8mbl.h 94KB
stm32f1xx_ll_gpio.h 86KB
stm32f1xx_ll_rcc.h 82KB
stm32f1xx_ll_dma.h 74KB
stm32f1xx_hal_rcc.h 65KB
cmsis_gcc.h 59KB
cmsis_armclang.h 53KB
core_cm0plus.h 48KB
core_sc000.h 45KB
stm32f1xx_hal_uart.h 45KB
stm32f1xx_ll_bus.h 44KB
core_cm1.h 41KB
core_cm0.h 40KB
stm32f1xx_hal_flash_ex.h 35KB
stm32f1xx_hal_gpio_ex.h 34KB
stm32f1xx_ll_exti.h 30KB
cmsis_iccarm.h 27KB
cmsis_armcc.h 27KB
stm32f1xx_ll_cortex.h 24KB
stm32f1xx_ll_system.h 23KB
stm32f1xx_hal_dma.h 17KB
stm32f1xx_hal_cortex.h 17KB
shell.h 15KB
stm32f1xx_hal_conf.h 15KB
stm32f1xx_ll_pwr.h 12KB
stm32f1xx_hal_dma_ex.h 12KB
stm32f1xx_hal_exti.h 12KB
stm32f1xx_hal_gpio.h 11KB
stm32f1xx_hal_pwr.h 11KB
mpu_armv7.h 11KB
stm32f1xx_hal.h 11KB
mpu_armv8.h 10KB
stm32f1xx.h 10KB
stm32f1xx_hal_tim_ex.h 9KB
stm32f1xx_hal_flash.h 9KB
cmsis_compiler.h 9KB
stm32f1xx_ll_utils.h 8KB
stm32f1xx_hal_def.h 7KB
shell_cfg.h 3KB
tz_context.h 3KB
main.h 2KB
stm32f1xx_it.h 2KB
system_stm32f1xx.h 2KB
cmsis_version.h 2KB
tim.h 1KB
usart.h 1KB
mpu6050.h 1KB
gpio.h 1KB
shell_ext.h 844B
Test-CubeMX.iml 97B
Test-CubeMX.ioc 6KB
clang-format.json 64KB
共 130 条
- 1
- 2
资源评论
- 2301_774807192023-11-20资源内容总结地很全面,值得借鉴,对我来说很有用,解决了我的燃眉之急。
白话机器学习
- 粉丝: 1w+
- 资源: 7671
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功