主程序  :
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();  /* 系统任务调度处理 */
  •     }
  • }
  • 复制代码
    printf实现效果
    33.jpg
    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",
  • };
  • 复制代码
    上述代码void shellInit(SHELL_TypeDef * shell) 用来初始化shell对象,首先打印shell界面,然后对shell对象进行初始化为默认状态,然后给shell命令表指定区域和数量。
    解析字符串
    /**
  • * @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;
  • }
  • 复制代码