嵌入式命令行操作(可移植性)

2019-07-12 23:46发布

本文档基于stm32f103并移植到F407, MSP430,以及s3c2440 最终效果如下: 以上多余打印是调试时解析bug用的,可以去除。 本文参考u-boot命令行,重点部分有三个:①数据定义 ②获取串口数据(1个字节) ③解析数据

数据定义

typedef void (*CLI_handler)(); struct cmd_tbl_s { char *name; /* Command Name */ int maxargs; /* maximum number of arguments */ CLI_handler cmd; /* Implementation function */ char *usage; /* Usage message (short) */ }; typedef struct cmd_tbl_s cmd_tbl_t; #define REGISTER_CMD(name,maxargs,handler,usage) const cmd_tbl_t strcmd_##name __attribute__ ((section ("cmd"))) = {#name, maxargs, handler, usage}

获取串口数据

 

判断串口是否有数据:

int UART_tstc(void) { return (USART2->SR & 0x0020); // RXNE }

读取数据

u8 UART_getc(void) { return (u8)(UART_BASE->DR & 0xFF); } 定义一个全局数组,保存串口信息 char console_buffer[256]; static int index = 0; /* buffer index */ 数据获取和解析 void cmdline_run(void) { char *p = &console_buffer[index]; char * p_buf = p; char c; if(UART_tstc()){ c = (char)UART_getc(); switch (c) { case ' ': /* Enter */ case ' ': *p = '