From 38b8c7795fb78aea693bf667c6fb16b97acd2fc0 Mon Sep 17 00:00:00 2001 From: Letter Date: Sun, 29 Nov 2020 14:32:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=BD=AC=E6=8D=A2=E6=9C=80=E5=A4=A7=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=99=90=E5=88=B6=20=E4=BF=AE=E5=A4=8D=20=E5=AF=B9?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=91=BD=E4=BB=A4=E4=BD=BF=E7=94=A8help?= =?UTF-8?q?=E6=97=B6=E4=BC=9A=E5=BC=95=E8=B5=B7=E5=BC=82=E5=B8=B8=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- demo/x86-gcc/shell_cfg.h | 2 +- src/shell.c | 17 +++++-- src/shell.h | 2 +- src/shell_ext.c | 106 +++++++++++++++++++++++++++++++++++++-- src/shell_ext.h | 4 +- 6 files changed, 119 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 3540016..a836ddf 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # letter shell 3.0 -![version](https://img.shields.io/badge/version-3.0.5-brightgreen.svg) +![version](https://img.shields.io/badge/version-3.0.6-brightgreen.svg) ![standard](https://img.shields.io/badge/standard-c99-brightgreen.svg) -![build](https://img.shields.io/badge/build-2020.08.23-brightgreen.svg) +![build](https://img.shields.io/badge/build-2020.11.29-brightgreen.svg) ![license](https://img.shields.io/badge/license-MIT-brightgreen.svg) 一个功能强大的嵌入式shell diff --git a/demo/x86-gcc/shell_cfg.h b/demo/x86-gcc/shell_cfg.h index ec9d185..e459f55 100644 --- a/demo/x86-gcc/shell_cfg.h +++ b/demo/x86-gcc/shell_cfg.h @@ -86,7 +86,7 @@ /** * @brief shell命令参数最大数量 - * 包含命令名在内,超过8个参数并且使用了参数自动转换的情况下,需要修改源码 + * 包含命令名在内,超过16个参数并且使用了参数自动转换的情况下,需要修改源码 */ #define SHELL_PARAMETER_MAX_NUMBER 8 diff --git a/src/shell.c b/src/shell.c index c180dad..23bf01f 100644 --- a/src/shell.c +++ b/src/shell.c @@ -1597,11 +1597,18 @@ void shellHelp(int argc, char *argv[]) argv[1], shell->commandList.base, 0); - shellWriteString(shell, shellText[SHELL_TEXT_HELP_HEADER]); - shellWriteString(shell, shellGetCommandName(command)); - shellWriteString(shell, "\r\n"); - shellWriteString(shell, shellGetCommandDesc(command)); - shellWriteString(shell, "\r\n"); + if (command) + { + shellWriteString(shell, shellText[SHELL_TEXT_HELP_HEADER]); + shellWriteString(shell, shellGetCommandName(command)); + shellWriteString(shell, "\r\n"); + shellWriteString(shell, shellGetCommandDesc(command)); + shellWriteString(shell, "\r\n"); + } + else + { + shellWriteString(shell, shellText[SHELL_TEXT_CMD_NOT_FOUND]); + } } } SHELL_EXPORT_CMD( diff --git a/src/shell.h b/src/shell.h index cfaaeab..3c73112 100644 --- a/src/shell.h +++ b/src/shell.h @@ -14,7 +14,7 @@ #include "shell_cfg.h" -#define SHELL_VERSION "3.0.5" /**< 版本号 */ +#define SHELL_VERSION "3.0.6" /**< 版本号 */ /** diff --git a/src/shell_ext.c b/src/shell_ext.c index 0f0d05b..7fbbc61 100644 --- a/src/shell_ext.c +++ b/src/shell_ext.c @@ -24,12 +24,12 @@ extern int shellGetVarValue(Shell *shell, ShellCommand *command); * @brief 判断数字进制 * * @param string 参数字符串 - * @return NUM_Type 进制 + * @return ShellNumType 进制 */ -static NUM_Type shellExtNumType(char *string) +static ShellNumType shellExtNumType(char *string) { char *p = string; - NUM_Type type = NUM_TYPE_INT; + ShellNumType type = NUM_TYPE_DEC; if ((*p == '0') && ((*(p + 1) == 'x') || (*(p + 1) == 'X'))) { @@ -174,7 +174,7 @@ static char* shellExtParseString(char *string) */ static unsigned int shellExtParseNumber(char *string) { - NUM_Type type = NUM_TYPE_INT; + ShellNumType type = NUM_TYPE_DEC; char radix = 10; char *p = string; char offset = 0; @@ -301,7 +301,7 @@ unsigned int shellExtParsePara(Shell *shell, char *string) */ int shellExtRun(Shell *shell, ShellCommand *command, int argc, char *argv[]) { - unsigned int params[8] = {0}; + unsigned int params[SHELL_PARAMETER_MAX_NUMBER] = {0}; int paramNum = command->attr.attrs.paramNum > (argc - 1) ? command->attr.attrs.paramNum : (argc - 1); for (int i = 0; i < argc - 1; i++) @@ -310,39 +310,135 @@ int shellExtRun(Shell *shell, ShellCommand *command, int argc, char *argv[]) } switch (paramNum) { +#if SHELL_PARAMETER_MAX_NUMBER >= 1 case 0: return command->data.cmd.function(); // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 1 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 2 case 1: return command->data.cmd.function(params[0]); // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 2 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 3 case 2: return command->data.cmd.function(params[0], params[1]); // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 3 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 4 case 3: return command->data.cmd.function(params[0], params[1], params[2]); // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 4 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 5 case 4: return command->data.cmd.function(params[0], params[1], params[2], params[3]); // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 5 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 6 case 5: return command->data.cmd.function(params[0], params[1], params[2], params[3], params[4]); // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 6 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 7 case 6: return command->data.cmd.function(params[0], params[1], params[2], params[3], params[4], params[5]); // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 7 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 8 case 7: return command->data.cmd.function(params[0], params[1], params[2], params[3], params[4], params[5], params[6]); // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 8 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 9 + case 8: + return command->data.cmd.function(params[0], params[1], + params[2], params[3], + params[4], params[5], + params[6], params[7]); + // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 9 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 10 + case 9: + return command->data.cmd.function(params[0], params[1], + params[2], params[3], + params[4], params[5], + params[6], params[7], + params[8]); + // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 10 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 11 + case 10: + return command->data.cmd.function(params[0], params[1], + params[2], params[3], + params[4], params[5], + params[6], params[7], + params[8], params[9]); + // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 11 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 12 + case 11: + return command->data.cmd.function(params[0], params[1], + params[2], params[3], + params[4], params[5], + params[6], params[7], + params[8], params[9], + params[10]); + // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 12 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 13 + case 12: + return command->data.cmd.function(params[0], params[1], + params[2], params[3], + params[4], params[5], + params[6], params[7], + params[8], params[9], + params[10], params[11]); + // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 13 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 14 + case 13: + return command->data.cmd.function(params[0], params[1], + params[2], params[3], + params[4], params[5], + params[6], params[7], + params[8], params[9], + params[10], params[11], + params[12]); + // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 14 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 15 + case 14: + return command->data.cmd.function(params[0], params[1], + params[2], params[3], + params[4], params[5], + params[6], params[7], + params[8], params[9], + params[10], params[11], + params[12], params[13]); + // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 15 */ +#if SHELL_PARAMETER_MAX_NUMBER >= 16 + case 15: + return command->data.cmd.function(params[0], params[1], + params[2], params[3], + params[4], params[5], + params[6], params[7], + params[8], params[9], + params[10], params[11], + params[12], params[13], + params[14]); + // break; +#endif /** SHELL_PARAMETER_MAX_NUMBER >= 16 */ default: return -1; // break; diff --git a/src/shell_ext.h b/src/shell_ext.h index f4d6a82..2e6158c 100644 --- a/src/shell_ext.h +++ b/src/shell_ext.h @@ -20,12 +20,12 @@ */ typedef enum { - NUM_TYPE_INT, /**< 十进制整型 */ + NUM_TYPE_DEC, /**< 十进制整型 */ NUM_TYPE_BIN, /**< 二进制整型 */ NUM_TYPE_OCT, /**< 八进制整型 */ NUM_TYPE_HEX, /**< 十六进制整型 */ NUM_TYPE_FLOAT /**< 浮点型 */ -} NUM_Type; +} ShellNumType; unsigned int shellExtParsePara(Shell *shell, char *string); int shellExtRun(Shell *shell, ShellCommand *command, int argc, char *argv[]);