本帖最后由 WoodData 于 2020-4-29 20:20 编辑
搞了一下串口shell,移植的nr_micro_shell.( https://gitee.com/nrush/nr_micro_shell )。测试感觉还不错,shell移植也很方便。
测试:
- #include "nr_micro_shell.h"
- #include "string.h"
- #include "ctype.h"
- #include "led.h"
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] ls command
- */
- void shell_ls_cmd(char argc, char *argv)
- {
- unsigned int i = 0;
- if (argc > 1)
- {
- if (!strcmp("cmd", &argv[argv[1]]))
- {
- for (i = 0; nr_shell.static_cmd[i].fp != NULL; i++)
- {
- shell_printf(nr_shell.static_cmd[i].cmd);
- shell_printf("\r\n");
- }
- }
- else if (!strcmp("-v", &argv[argv[1]]))
- {
- shell_printf("ls version 1.0.\r\n");
- }
- else if (!strcmp("-h", &argv[argv[1]]))
- {
- shell_printf("useage: ls [options]\r\n");
- shell_printf("options: \r\n");
- shell_printf("\t -h \t: show help\r\n");
- shell_printf("\t -v \t: show version\r\n");
- shell_printf("\t cmd \t: show all commands\r\n");
- }
- }
- else
- {
- shell_printf("ls need more arguments!\r\n");
- }
- }
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] test command
- */
- void shell_test_cmd(char argc, char *argv)
- {
- unsigned int i;
- shell_printf("test command:\r\n");
- for (i = 0; i < argc; i++)
- {
- shell_printf("paras %d: %s\r\n", i, &(argv[argv[i]]));
- }
- }
- /**
- * @brief test command
- */
- void shell_led_cmd(char argc, char *argv)
- {
- if (argc > 1)
- {
- if (!strcmp("on", &argv[argv[1]]))
- {
- if (!strcmp("1", &argv[argv[2]]))
- {
- LED1_ON();
- }else if (!strcmp("2", &argv[argv[2]]))
- {
- LED2_ON();
- }else if (!strcmp("3", &argv[argv[2]]))
- {
- LED3_ON();
- }else if (!strcmp("4", &argv[argv[2]]))
- {
- LED4_ON();
- }else
- {
- shell_printf("useage: led [on/off] [1/2/3/4]\r\n");
- }
- }else if (!strcmp("off", &argv[argv[1]]))
- {
- if (!strcmp("1", &argv[argv[2]]))
- {
- LED1_OFF();
- }else if (!strcmp("2", &argv[argv[2]]))
- {
- LED2_OFF();
- }else if (!strcmp("3", &argv[argv[2]]))
- {
- LED3_OFF();
- }else if (!strcmp("4", &argv[argv[2]]))
- {
- LED4_OFF();
- }else
- {
- shell_printf("useage: led [on/off] [1/2/3/4]\r\n");
- }
-
- }else{
- shell_printf("useage: led [on/off] [1/2/3/4]\r\n");
- }
- }
- }
- #ifdef NR_SHELL_USING_EXPORT_CMD
- NR_SHELL_CMD_EXPORT(ls, shell_ls_cmd);
- NR_SHELL_CMD_EXPORT(test, shell_test_cmd);
- NR_SHELL_CMD_EXPORT(led, shell_led_cmd);
- #else
- const static_cmd_st static_cmd[] =
- {
- {"ls", shell_ls_cmd},
- {"test", shell_test_cmd},
- {"led", shell_led_cmd},
-
- {"\0", NULL}
- };
-
-
- #endif
- int main(void)
- {
- u8 ch;
-
- Delay_Init();
- LED_Init();
- Uart1_Init(115200);
- Uart2_Init(115200);
- shell_init(); /* nr_micro_shell*/
-
- while(1)
- {
- ch = Uart1_Recv();
- shell(ch);
- }
- }
工程:
|