int main(void){ MCU_Config(); /* 芯片内部资源初始化集合 */ BSP_Init(); /* 板载硬件资源初始化集合 */ /* 打印系统上电初始化完成后的信息 */ printf("\r\n\r\neMiniBoard MB-021(MM32W373PSB) %s %s\r\n\r\n", __DATE__, __TIME__); while(1) { EVENT_Scanning(); /* 系统事件扫描处理 */ TASK_Scheduling(); /* 系统任务调度处理 */ } }
复制代码void MCU_Config(void){ ADC1_Config(); /* ADC1初始化配置 */ SysTick_Init(); /* SysTick系统滴答时钟初始化配置 */ TIM4_Config(); /* TIM4定时器初始化配置 */ UART2_Config(); /* UART2串口初始化配置 */ }
复制代码void BSP_Init(void){ AT24C02N_Init(); /* EEPROM AT24C02N初始化 */ BUZZER_Init(); /* 蜂鸣器初始化 */ HK25Q16C_Init(); /* SPI FLASH HK25Q16C初始化 */ KEY_Init(); /* 用户按键初始化 */ LED_Init(); /* LED灯初始化 */ }
复制代码typedef struct{ char *command; /**< shell命令提示符 */ char buffer[SHELL_COMMAND_MAX_LENGTH]; /**< shell命令缓冲 */ unsigned short length; /**< shell命令长度 */ unsigned short cursor; /**< shell光标位置 */ char *param[SHELL_PARAMETER_MAX_NUMBER]; /**< shell参数 */ char history[SHELL_HISTORY_MAX_NUMBER][SHELL_COMMAND_MAX_LENGTH]; /**< 历史记录 */ unsigned short historyCount; /**< 历史记录数量 */ short historyFlag; /**< 当前记录位置 */ short historyOffset; /**< 历史记录偏移 */ SHELL_CommandTypeDef *commandBase; /**< 命令表基址 */ unsigned short commandNumber; /**< 命令数量 */ #if SHELL_USING_VAR == 1 SHELL_VaribaleTypeDef *variableBase; /**< 变量表基址 */ unsigned short variableNumber; /**< 变量数量 */ #endif int keyFuncBase; /**< 按键响应表基址 */ unsigned short keyFuncNumber; /**< 按键响应数量 */ struct { unsigned char inputMode : 2; /**< 输入模式 */ unsigned char isActive: 1; /**< 是否是当前活动shell */ unsigned char tabFlag : 1; /**< tab标志 */ unsigned char authFlag : 1; /**< 密码标志 */ } status; /**< shell状态 */ shellRead read; /**< shell读字符 */ shellWrite write; /**< shell写字符 */ #if SHELL_LONG_HELP == 1 || (SHELL_USING_AUTH && SHELL_LOCK_TIMEOUT > 0) int activeTime; /**< shell激活时间戳 */ #endif }SHELL_TypeDef;
复制代码以下为函数初始化配置及相关全局变量定义内容,如上所示,为对象的定义接口,具体说明看注释,我们需要关注的是shell的读写接口。
/** * @brief shell提示信息文本 */ static const char *shellText[] = { [TEXT_INFO] = "\r\n\r\n" "===========================================================\r\n" "| (C) COPYRIGHT 2019 Letter |\r\n" "| Letter shell v"SHELL_VERSION" |\r\n" "| Build: "__DATE__" "__TIME__" |\r\n" "===========================================================\r\n", [TEXT_PWD_HINT] = "\r\nPlease input password:", [TEXT_PWD_RIGHT] = "\r\npassword confirm success.\r\n", [TEXT_PWD_ERROR] = "\r\npassword confirm failed.\r\n", [TEXT_FUN_LIST] = "\r\nCOMMAND LIST:\r\n\r\n", [TEXT_VAR_LIST] = "\r\nVARIABLE LIST:\r\n\r\n", [TEXT_CMD_NONE] = "Command not found\r\n", [TEXT_CMD_TOO_LONG] = "\r\nWarnig: Command is too long\r\n", [TEXT_READ_NOT_DEF] = "error: shell.read must be defined\r\n", };
复制代码解析字符串
/** * @brief 解析字符串参数 * * @param string 字符串参数 * @return char* 解析出的字符串 */ static char* shellExtParseString(char *string) { char *p = string; unsigned short index = 0; if (*string == '"') { p = ++string; } while (*p) { if (*p == '\\') { *(string + index) = shellExtParseChar(p - 1); p++; } else if (*p == '"') { *(string + index) = 0; } else { *(string + index) = *p; } p++; index ++; } *(string + index) = 0; return string; }
复制代码