1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #20958 from maribu/sys/shell/xfa-reduce-overhead

sys/shell: reduce overhead of XFA shell commands
This commit is contained in:
mguetschow 2024-11-22 14:03:57 +00:00 committed by GitHub
commit a9108a40dd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 10 additions and 12 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -302,15 +302,14 @@ int shell_parse_file(const shell_command_t *commands,
* ``` * ```
*/ */
#define SHELL_COMMAND(cmd, help, func) \ #define SHELL_COMMAND(cmd, help, func) \
XFA_USE_CONST(shell_command_xfa_t*, shell_commands_xfa); \ XFA_USE_CONST(shell_command_xfa_t, shell_commands_xfa_v2); \
static FLASH_ATTR const char _xfa_ ## cmd ## _cmd_name[] = #cmd; \ static FLASH_ATTR const char _xfa_ ## cmd ## _cmd_name[] = #cmd; \
static FLASH_ATTR const char _xfa_ ## cmd ## _cmd_desc[] = help; \ static FLASH_ATTR const char _xfa_ ## cmd ## _cmd_desc[] = help; \
static const shell_command_xfa_t _xfa_ ## cmd ## _cmd = { \ XFA_CONST(shell_command_xfa_t, shell_commands_xfa_v2, 0) _xfa_ ## cmd ## _cmd = { \
.name = _xfa_ ## cmd ## _cmd_name, \ .name = _xfa_ ## cmd ## _cmd_name, \
.desc = _xfa_ ## cmd ## _cmd_desc, \ .desc = _xfa_ ## cmd ## _cmd_desc, \
.handler = &func \ .handler = &func \
}; \ };
XFA_ADD_PTR(shell_commands_xfa, cmd, cmd, &_xfa_ ## cmd ## _cmd)
#endif /* __cplusplus */ #endif /* __cplusplus */
#ifdef __cplusplus #ifdef __cplusplus

Binary file not shown.

View File

@ -36,7 +36,6 @@
#include <assert.h> #include <assert.h>
#include <errno.h> #include <errno.h>
#include "kernel_defines.h"
#include "xfa.h" #include "xfa.h"
#include "shell.h" #include "shell.h"
#include "shell_lock.h" #include "shell_lock.h"
@ -47,7 +46,7 @@
#endif #endif
/* define shell command cross file array */ /* define shell command cross file array */
XFA_INIT_CONST(shell_command_xfa_t*, shell_commands_xfa); XFA_INIT_CONST(shell_command_xfa_t, shell_commands_xfa_v2);
#define ETX '\x03' /** ASCII "End-of-Text", or Ctrl-C */ #define ETX '\x03' /** ASCII "End-of-Text", or Ctrl-C */
#define EOT '\x04' /** ASCII "End-of-Transmission", or Ctrl-D */ #define EOT '\x04' /** ASCII "End-of-Transmission", or Ctrl-D */
@ -102,10 +101,10 @@ static shell_command_handler_t search_commands(const shell_command_t *entry,
static shell_command_handler_t search_commands_xfa(char *command) static shell_command_handler_t search_commands_xfa(char *command)
{ {
unsigned n = XFA_LEN(shell_command_t*, shell_commands_xfa); unsigned n = XFA_LEN(shell_command_t, shell_commands_xfa_v2);
for (unsigned i = 0; i < n; i++) { for (unsigned i = 0; i < n; i++) {
const volatile shell_command_xfa_t *entry = shell_commands_xfa[i]; const volatile shell_command_xfa_t *entry = &shell_commands_xfa_v2[i];
if (flash_strcmp(command, entry->name) == 0) { if (flash_strcmp(command, entry->name) == 0) {
return entry->handler; return entry->handler;
} }
@ -147,7 +146,7 @@ static void print_commands_json(const shell_command_t *cmd_list)
} }
} }
unsigned n = XFA_LEN(shell_command_xfa_t*, shell_commands_xfa); unsigned n = XFA_LEN(shell_command_xfa_t, shell_commands_xfa_v2);
for (unsigned i = 0; i < n; i++) { for (unsigned i = 0; i < n; i++) {
if (first) { if (first) {
first = false; first = false;
@ -155,7 +154,7 @@ static void print_commands_json(const shell_command_t *cmd_list)
else { else {
printf(", "); printf(", ");
} }
const volatile shell_command_xfa_t *entry = shell_commands_xfa[i]; const volatile shell_command_xfa_t *entry = &shell_commands_xfa_v2[i];
printf("{\"cmd\": \"%s\", \"desc\": \"%s\"}", entry->name, entry->desc); printf("{\"cmd\": \"%s\", \"desc\": \"%s\"}", entry->name, entry->desc);
} }
puts("]}"); puts("]}");
@ -170,9 +169,9 @@ static void print_commands(const shell_command_t *entry)
static void print_commands_xfa(void) static void print_commands_xfa(void)
{ {
unsigned n = XFA_LEN(shell_command_xfa_t*, shell_commands_xfa); unsigned n = XFA_LEN(shell_command_xfa_t, shell_commands_xfa_v2);
for (unsigned i = 0; i < n; i++) { for (unsigned i = 0; i < n; i++) {
const volatile shell_command_xfa_t *entry = shell_commands_xfa[i]; const volatile shell_command_xfa_t *entry = &shell_commands_xfa_v2[i];
printf("%-20" PRIsflash " %" PRIsflash "\n", printf("%-20" PRIsflash " %" PRIsflash "\n",
entry->name, entry->desc); entry->name, entry->desc);
} }

Binary file not shown.