1
0
mirror of https://github.com/NevermindZZT/letter-shell.git synced 2025-01-21 10:02:54 +08:00

8 Commits

Author SHA1 Message Date
Letter
1725f88d1e 移除 命令结构体填充 2023-05-27 08:23:01 +00:00
Letter
e9375840bd 新增 自定义类型解析
- 可以对自定义的数据结构定义解析器,然后使用函数签名进行参数自动解析
2023-04-22 07:50:25 +00:00
Letter
99b5e6d386 新增 支持自定义类型的函数签名 2023-04-16 17:18:38 +08:00
Letter
acd9dceb4e 新增 函数签名
## 函数签名

之前的版本里,如果声明的命令是 `SHELL_TYPE_CMD_FUNC`,shell 会自动进行参数的转换,但是参数转换后的类型是猜出来的,无法保证转换后的数据类型是正确的,一旦猜错了,就容易导致程序挂掉

由此,借鉴 Java 等语言的函数签名,新版也引入了函数签名的概念,在声明命令时,可以给定最终执行命令的函数的签名,shell 根据这个签名进行参数转换,使用此功能时,需要打开宏 `SHELL_USING_FUNC_SIGNATURE`

函数签名是一个字符串,通过这个字符串声明表达函数的参数类型,返回值不声明,比如一个函数`int func(int a, char *b, char c)`,它的函数签名就是 `ics`

基本类型的参数签名定义如下:

| 类型                 | 签名 |
| -------------------- | ---- |
| char(字符)           | c    |
| int/short/char(数字) | i    |
| char * (字符串)      | s    |
| pointer              | p    |

声明命令时,在最后添加一个参数 `.data.cmd.signature = "ics"` 即可,比如:

```c
void shellFuncSignatureTest(int a, char *b, char c)
{
    printf("a = %d, b = %s, c = %c\r\n", a, b, c);
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
funcSignatureTest, shellFuncSignatureTest, test function signature, .data.cmd.signature = "isc");
```
2023-04-15 16:30:44 +08:00
Letter
663f792c60 修复 编译问题 2021-05-24 15:51:59 +08:00
NevermindZZT
e376b61397 防止 编译器优化 2021-05-09 13:43:59 +08:00
NevermindZZT
ef1bde9600 增加 cpp support的readme和示例 2021-01-17 15:30:47 +08:00
Letter
682653fe16 新增 cpp支持 2021-01-09 17:52:11 +08:00