mirror of
https://github.com/NevermindZZT/letter-shell.git
synced 2025-01-01 09:58:41 +08:00
移除 命令结构体填充
This commit is contained in:
parent
e9375840bd
commit
1725f88d1e
@ -181,7 +181,6 @@
|
||||
| SHELL_DEFAULT_USER_PASSWORD | 默认用户密码 |
|
||||
| SHELL_LOCK_TIMEOUT | shell自动锁定超时 |
|
||||
| SHELL_USING_FUNC_SIGNATURE | 使用函数签名 |
|
||||
| SHELL_COMMAND_FILL_BYTES | 命令结构体填充字节数 |
|
||||
|
||||
## 使用方式
|
||||
|
||||
|
@ -73,14 +73,4 @@ unsigned int userGetTick();
|
||||
*/
|
||||
#define SHELL_USING_FUNC_SIGNATURE 1
|
||||
|
||||
/**
|
||||
* @brief 命令填充字节数
|
||||
* 这个选项控制对声明的命令结构体进行填充,填充的字节数为`SHELL_COMMAND_FILL_BYTES`,
|
||||
* 填充的数据位于命令结构体的末尾
|
||||
* 部分编译器会在结构体数据后面进行填充,使变量的地址对齐,这会导致 shell 中
|
||||
* 通过 sizeof 获取结构体大小,然后通过偏移进行遍历的时候,无法正确地找到命令
|
||||
* 通过填充,我们主动将结构体对齐,从而使得 shell 可以正确地遍历命令
|
||||
*/
|
||||
#define SHELL_COMMAND_FILL_BYTES 24
|
||||
|
||||
#endif
|
||||
|
@ -28,9 +28,6 @@ typedef struct shell_command_cpp_cmd
|
||||
#if SHELL_USING_FUNC_SIGNATURE == 1
|
||||
const char *signature; /**< 函数签名 */
|
||||
#endif
|
||||
#if SHELL_COMMAND_FILL_BYTES != 0
|
||||
char fill[SHELL_COMMAND_FILL_BYTES]; /**< 填充字节 */
|
||||
#endif
|
||||
} ShellCommandCppCmd;
|
||||
|
||||
/**
|
||||
@ -45,9 +42,6 @@ typedef struct shell_command_cpp_var
|
||||
#if SHELL_USING_FUNC_SIGNATURE == 1
|
||||
void *unused; /**< 未使用成员,需要保持和 ShellCommandCppCmd 大小一致 */
|
||||
#endif
|
||||
#if SHELL_COMMAND_FILL_BYTES != 0
|
||||
char fill[SHELL_COMMAND_FILL_BYTES]; /**< 填充字节 */
|
||||
#endif
|
||||
} ShellCommandCppVar;
|
||||
|
||||
/**
|
||||
@ -62,9 +56,6 @@ typedef struct shell_command_cpp_user
|
||||
#if SHELL_USING_FUNC_SIGNATURE == 1
|
||||
void *unused; /**< 未使用成员,需要保持和 ShellCommandCppCmd 大小一致 */
|
||||
#endif
|
||||
#if SHELL_COMMAND_FILL_BYTES != 0
|
||||
char fill[SHELL_COMMAND_FILL_BYTES]; /**< 填充字节 */
|
||||
#endif
|
||||
} ShellCommandCppUser;
|
||||
|
||||
/**
|
||||
@ -79,9 +70,6 @@ typedef struct shell_command_cpp_key
|
||||
#if SHELL_USING_FUNC_SIGNATURE == 1
|
||||
void *unused; /**< 未使用成员,需要保持和 ShellCommandCppCmd 大小一致 */
|
||||
#endif
|
||||
#if SHELL_COMMAND_FILL_BYTES != 0
|
||||
char fill[SHELL_COMMAND_FILL_BYTES]; /**< 填充字节 */
|
||||
#endif
|
||||
} ShellCommandCppKey;
|
||||
|
||||
#if SHELL_USING_FUNC_SIGNATURE == 1
|
||||
@ -92,9 +80,6 @@ typedef struct shell_command_cpp_param_parser
|
||||
int (*parser)(char *, void **);; /**< 解析函数 */
|
||||
int (*cleaner)(void *); /**< 清理函数 */
|
||||
void *unsed; /**< 未使用成员,需要保持和 ShellCommandCppCmd 大小一致 */
|
||||
#if SHELL_COMMAND_FILL_BYTES != 0
|
||||
char fill[SHELL_COMMAND_FILL_BYTES]; /**< 填充字节 */
|
||||
#endif
|
||||
} ShellCommandCppParamParser;
|
||||
#endif
|
||||
|
||||
|
@ -77,11 +77,11 @@
|
||||
|
||||
#ifndef SHELL_SECTION
|
||||
#if defined(__CC_ARM) || defined(__CLANG_ARM)
|
||||
#define SHELL_SECTION(x) __attribute__((section(x)))
|
||||
#define SHELL_SECTION(x) __attribute__((section(x), aligned(1)))
|
||||
#elif defined (__IAR_SYSTEMS_ICC__)
|
||||
#define SHELL_SECTION(x) @ x
|
||||
#elif defined(__GNUC__)
|
||||
#define SHELL_SECTION(x) __attribute__((section(x)))
|
||||
#define SHELL_SECTION(x) __attribute__((section(x), aligned(1)))
|
||||
#else
|
||||
#define SHELL_SECTION(x)
|
||||
#endif
|
||||
@ -503,9 +503,6 @@ typedef struct shell_command
|
||||
} paramParser; /**< 参数解析器 */
|
||||
#endif
|
||||
} data;
|
||||
#if SHELL_COMMAND_FILL_BYTES != 0
|
||||
char fill[SHELL_COMMAND_FILL_BYTES]; /**< 填充字节 */
|
||||
#endif
|
||||
} ShellCommand;
|
||||
|
||||
/**
|
||||
|
@ -255,16 +255,4 @@
|
||||
#define SHELL_USING_FUNC_SIGNATURE 0
|
||||
#endif /** SHELL_USING_FUNC_SIGNATURE */
|
||||
|
||||
#ifndef SHELL_COMMAND_FILL_BYTES
|
||||
/**
|
||||
* @brief 命令填充字节数
|
||||
* 这个选项控制对声明的命令结构体进行填充,填充的字节数为`SHELL_COMMAND_FILL_BYTES`,
|
||||
* 填充的数据位于命令结构体的末尾
|
||||
* 部分编译器会在结构体数据后面进行填充,使变量的地址对齐,这会导致 shell 中
|
||||
* 通过 sizeof 获取结构体大小,然后通过偏移进行遍历的时候,无法正确地找到命令
|
||||
* 通过填充,我们主动将结构体对齐,从而使得 shell 可以正确地遍历命令
|
||||
*/
|
||||
#define SHELL_COMMAND_FILL_BYTES 0
|
||||
#endif /** SHELL_COMMAND_FILL_BYTES */
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user