文档资料

3.3 命令行终端

MiCO CLI 命令行调试

MiCO 为用户提供串口 CLI 命令行调试功能,用来查看当前设备状态,以协助调试分析。

  1. 简介
  2. CLI 功能实现
  3. CLI 功能 API 原型
  4. CLI 串口连接
  5. CLI 命令列表
  6. CLI 命令使用示例

简介

MiCO 的 CLI 命令是通过系统调试串口进行输入输出的。如:调试串口(波特率通常为:115200bps)输入:help,可以看到帮助命令列表:

cli_help

CLI功能实现

MiCO 若需打开CLI功能,根据MiCO SDK版本不同,修改如下:

1)在工程中(基于MiCO_SDK_v2.2.0版本),只需要修改两处代码即可:

  • a.包含头文件:#include “MICOCli.h“
  • b.在application_start()中加一行代码:MicoCliInit() ,启用MiCO的CLI功能。

该API用于启动一个CLI的Thread, 用于接收命令并执行命令。打开串口用于CLI命令的收发。由于命令处理函数会占用较多的栈,所以该Thread分配了4K字节的栈。在Platform_common_config.h中定义CLI_UART使用MICO的哪个串口。这个串口一定不要同透传使用的串口相同,不然会导致串口数据可能被当作透传数据而无法作为CLI的命令。 要使用串口作为CLI的输入,由于UART在MCU低功耗下容易丢包,所以最好不开打MCU低功耗功能,否则命令输入容易失败。

2)在工程(MiCO_SDK_v2.3.0及以上版本)中,已在函数: mico_system_init( mico_context )中默认开启串口命令行调试功能, 用户不需再修改代码增加功能。

CLI新命令的添加和删除

CLI 每条命令定义在mico_cli.h文件中,定义如下:

 struct cli_command {
    /** The name of the CLI command */
    const char *name;
    /** The help text associated with the command */
    const char *help;
    /** The function that should be invoked for this command. */
    void (*function) (char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
}; 
int cli_register_command(const struct cli_command *command) 

功能:添加一条命令 参数: command是一个命令的指针,该内存地址必不能free,CLI只是记录该内存的指针,不会做copy。 返回:成功返回0,失败返回1.

int cli_register_commands(const struct cli_command *commands, int num_commands) 

功能:添加一组命令 参数:commands指向一个命令数组,该数组不能free,CLI只是记录改组数组的各个命令的指针;num_commands是这个数组的命令数。 返回:成功返回0,失败返回1.

int cli_unregister_command(const struct cli_command *command) 

功能:删除一条命令 参数:command指针必须同register的command是相同地址成功成功; 返回:成功返回0,失败返回1.

int cli_register_commands(const struct cli_command *commands, int num_commands) 

功能:从commands数组中删除num_commands条命令。 返回:成功返回0,失败返回1.

CLI输入输出函数

int cli_printf(const char *msg, ...) 

类似于printf功能的输出函数,实现CLI结果的输出。

int cli_putstr(const char *msg) 

CLI不带格式的输出,msg指向一个字符串。

int cli_getchar(char *inbuf) 

CLI的输入,每次获取一个字节的数据,成功返回1,失败返回0.

CLI功能API原型

为了便于调试,MiCO2.0库提供了一组调试用的API。每个API原型为:void (*function) (char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv); 其中:

  • pcWriteBuffer:用于记录CLI结果的缓存地址;
  • xWriteBufferLen:缓存的最大长度;
  • argc: CLI的参数数量,包含命令;
  • argv: 参数数组指针,包含argc个字符串。

CLI串口连接

1.确认UART口

在MiCO SDK中,调试串口和调试命令串口通常共用一个UART口,具体的需根据Wi-Fi模块型号在SDK Board/platform.c中确认。以MiCOKit-3165为例,CLI串口定义如下:

cli_uart

2.安装驱动程序

开发板电源线,即调试串口线连接至PC端后,需安装USB转UART驱动程序,下载地址:http://www.ftdichip.com/Drivers/VCP.htm,

3.PC端查看端口号

安装成功后,打开PC设备管理器,查看串口信息,如下图所示:

cli_com

4.SecureCRT连接串口

发现端口号COM11,表示驱动成功安装,打开SecureCRT(或其他串口调试软件),连接COM11串口,设置如下:

cli_comcofig

连接成功后,即可向串口输入命令行进行调试。

CLI命令列表

在调试串口输入以下“串口命令”,即可获取想要的信息。 命令行种类及对应的功能,如下表:



CLI命令使用示例
下面就对列表中的CLI命令进行一一介绍。

help:查询全部串口命令及功能

在Command Window命令窗口中输入命令“help”,回车,串口返回内容,如下图:

cli_help

version:查询设备固件版本信息

在Command Window命令窗口中输入命令“version”,回车,串口返回内容,如下图:

cli_version

echo:查询或设置命令回传功能

(1)在Command Window命令窗口中输入命令“echo”,回车,串口返回内容,如下图:

cli_echo

命令回传功能关闭。输入命令“version”回车,看到返回中无“# version”

(2)在Command Window命令窗口中输入命令“echo off”,回车,串口返回内容,如下图:

cli_echo_on

命令回传功能开启。输入命令“version”回车,看到返回中出现“# version”。 通常建议开启echo功能,便于同步观察命令功能

exit:退出串口命令行状态

在Command Window命令窗口中输入命令“exit”,回车,串口返回内容,如下图:

cli_exit

此后输入命令无效,必须上电重启设备后才能生效。

scan:扫描周围的WiFi接入点AP

void wifiscan_Command(CLI_ARGS); 

在Command Window命令窗口中输入命令“scan”,回车,串口返回内容,如下图:

cli_scan

获取到MiCO设备附近的AP热点名称,通道,加密方式,及信号强度。

wifistate:查询wifi当前状态

void wifistate_Command(CLI_ARGS) 

在Command Window命令窗口中输入命令“wifistate”,回车,串口返回内容,如下图:

cli_wifistate

首先输出需要连接的AP的信息,包括SSID,密码,BSSID和重试间隔(单位ms)。 然后输出连接的状态,如果已经连接成功,会输出连接AP的详细信息,包括SSID,通道,信号强度和BSSID。

wifidebug:查看或设置WiFi调试功能

void wifidebug_Command(CLI_ARGS); 

其中:argc必须是2,argv[1]可以是”on”和”off”,分别用于打开和关闭wifi debug输出。 (1)当设备进入配网状态,等待配网时,在Command Window命令窗口中输入命令“wifidebug on”,回车,然后再进行配网,串口返回内容,如下图:

cli_wifidebugon

注意:该命令为动态指令,一次带电过程中有效,重新上电即关闭,需再次开启才生效。

(2)在Command Window命令窗口中输入命令“wifidebug off”,回车,串口返回内容,如下图:

!cli_wifidebugoff

此时,WiFi库中的调试信息log将停止输出。

ifconfig:查询设备IP地址

void ifconfig_Command(CLI_ARGS) 

在Command Window命令窗口中输入命令“ifconfig”,回车,串口返回内容,如下图:

cli_ifconfig

arp:查询或清除arp列表

void arp_Command(CLI_ARGS) 

arp命令支持一个参数,分别是show和clean。 Clean用于清除ARP缓存。show用于输出arp缓存,使用如下:

(1)在Command Window命令窗口中输入命令“arp”,回车,串口返回内容,如下图: 返回arp命令格式分别为show和clean。

cli_arp

(2)在Command Window命令窗口中输入命令“arp show”,回车, 然后,通过ping命令与局域网内其他IP地址进行通信尝试, 再次通过“arp show”返回结果如下图

cli_arpshow

(3)在Command Window命令窗口中输入命令“arp clean”,清楚arp缓存,回车, 然后,通过指令“arp show”查看,串口返回内容如下图:

cli_arpclean

ping:测试本机与某IP地址能否连通

void ping_Command(CLI_ARGS); 

ping命令用于ping某个IP地址,仅支持IP地址,不支持域名。 会连续ping 5次,每次延时1秒钟,ping完成以后输出结果 在Command Window命令窗口中输入命令“ping 192.168.1.1”,回车,串口返回内容,如下图:

cli_ping

说明设备与该IP地址连通。

dns:查询或清除DNS域名解析IP地址

void dns_Command(CLI_ARGS) 

(1)在Command Window命令窗口中输入命令“dns”,回车,串口返回内容如下图:

cli_dns

可显示dns的命令格式。(此时设备运行demo: wifi_uart透传工程,已配网)

(2)在Command Window命令窗口中输入命令“dns show”,回车,串口返回内容如下图:

cli_dnsshow

此时,Command Window命令窗口中输入命令“dns www.baidu.com”等,返回内容如下:

cli_dnsshowbaidu

此时,在Command Window命令窗口中输入命令“dns show”,回车,返回如下图:

cli_dnsshowlist

(3)在Command Window命令窗口中输入命令“dns clean”,回车,串口返回内容如下图:

cli_dnsclean

sockshow:查询所有socket套接字状态

void socket_show_Command(CLI_ARGS); 

显示当前系统socket的状态,分别显示BSD socket的状态,TCP的状态和UDP的状态。 在Command Window命令窗口中输入命令“sockshow”,回车,串口返回内容,如下图:显示设备当前的所有socket连接状态信息。

cli_sockshow

tasklist:查询所有线程名字及状态

void task_Command(CLI_ARGS); 

用于显示当前系统的Thread线程的状态。 在Command Window命令窗口中输入命令“tasklist”,回车,串口返回内容,如下图:显示设备当前的所有线程状态信息。

cli_tasklist

其中:

  • Status(状态)——R代表线程运行,S代表线程停止,B代表线程阻塞;
  • Prio(优先级)——线程优先级等级;
  • Stack(栈)——线程占用栈空间大小;
  • TCB(任务快)——线程任务块大小。

memshow:查询内存使用信息

void memory_show_Command(CLI_ARGS); 

显示当前系统的内存情况 在Command Window命令窗口中输入命令“memshow”,回车,串口返回内容,如下图:显示设备当前的内存使用信息。

cli_memsshow

memdump:从指定内存地址中复制数据

void memory_dump_Command(CLI_ARGS); 

以HEX格式DUMP出一段内存地址的内容。 在Command Window命令窗口中输入命令“memdump 0x0001000 100”,回车,串口返回内容,如下图:读取到 设备指定内存地址的数据。

cli_memp

其中0x200003c0是需要dump的内存地址的起始地址,10是需要dump的长度。

memset:向指定内存地址中设置数据

void memory_set_Command(CLI_ARGS); 

设置某段内存地址的数据内容。 (1)在Command Window命令窗口中输入命令“memset 0x0001000 100”,回车,串口返回内容,如下图:写入到 设备指定内存地址数据,并通过 memdump 命令读出,验证写入的数据内容。

cli_memset

其中,0x200003c0是起始地址,后面可跟多个参数,每个参数对应一个地址的内容。 但是注意:有时 有些内存地址是不允许写入的。

memp:查询内存空间分配列表

void memp_dump_Command(CLI_ARGS); 

显示当前协议栈各个缓存地址池的使用情况。 在Command Window命令窗口中输入命令“memp”,回车,串口返回内容,如下图:显示设备当前的内存分配情况。

cli_memp

wifidriver:查询wifi驱动状态

void driver_state_Command(CLI_ARGS); 

用于打印出当前系统中wifi驱动的运行状态, 在Command Window命令窗口中输入命令“wifidriver”,回车,串口返回内容,如下图。

cli_wifidriver

版权所有 © 2017 - 2018 MXCHIP授权代理商 - 深圳市博易特智能科技有限公司 粤ICP备17063559号

服务热线:0755-23733662 Email:info@mxchip.cc

业务咨询:

MXCHIP在线客服,很高兴为您服务!

项目合作:

MXCHIP在线客服,很高兴为您服务!

售后客服:

MXCHIP在线客服,很高兴为您服务!

服务时间:

9:00-22:00(工作日)