FinSH控制台

优质
小牛编辑
130浏览
2023-12-01

FinSH控制台接口

宏定义

#define FINSH_FUNCTION_EXPORT(name, desc)   FINSH_FUNCTION_EXPORT_CMD(name, name, desc)
 自定义msh 命令
 
#define FINSH_FUNCTION_EXPORT_ALIAS(name, alias, desc)   FINSH_FUNCTION_EXPORT_CMD(name, alias, desc)
 自定义命令重命名
 
#define MSH_CMD_EXPORT(command, desc)
 自定义C-Style 命令和变量
 

函数

void finsh_syscall_append (const char *name, syscall_func func)
 添加调用函数
 
void finsh_sysvar_append (const char *name, uint8_t type, void *addr)
 添加环境变量
 
rt_uint32_t finsh_get_prompt_mode (void)
 
void finsh_set_prompt_mode (rt_uint32_t prompt_mode)
 
void finsh_set_device (const char *device_name)
 设置finsh shell的输入设备
 
const char * finsh_get_device ()
 获取finsh shell的输入设备
 
void finsh_set_echo (rt_uint32_t echo)
 设置回显模式
 
rt_uint32_t finsh_get_echo ()
 获取回显模式
 

详细描述

FinSH控制台接口

FinSH是RT-Thread的命令行外壳(shell),提供一套供用户在命令行的操作接口,主要用于调试或查看系统信息。FinSH支持两种模式:

  1. C语言解释器模式,为行文方便称之为c-style;
  2. 传统命令行模式,此模式又称为msh(module shell)。

C语言表达式解释模式下,FinSH能够解析执行大部分C语言的表达式,并使用类似C语言的函数调用方式访问系统中的函数及全局变量,此外它也能够通过命令行方式创建变量。

在msh模式下,FinSH运行方式类似于dos/bash等传统shell。

在本章的最后一节宏选项中介绍如何配置FinSH,读者可以根据自己的喜好配置FinSH。

宏定义说明

#define FINSH_FUNCTION_EXPORT( name,
 desc 
)   FINSH_FUNCTION_EXPORT_CMD(name, name, desc)

自定义msh 命令

自定义的msh 命令,可以在msh 模式下被运行,将一个命令导出到msh 模式可以使用如下宏该接口。

参数
name要导出的命令
desc导出命令的描述
#define FINSH_FUNCTION_EXPORT_ALIAS( name,
 alias,
 desc 
)   FINSH_FUNCTION_EXPORT_CMD(name, alias, desc)

自定义命令重命名

FinSH 的函数名字长度有一定限制,它由finsh.h 中的宏定义FinSH_NAME_MAX 控制,默认 是16 字节,这意味着FinSH 命令长度不会超过16 字节。这里有个潜在的问题。当一个函数名长 度超过FinSH_NAME_MAX 时,使用FinSH_FUNCTION_EXPORT 导出这个函数到命令表中后, 在FinSH 符号表中看到完整的函数名,但是完整输入执行会出现null node 错误。这是因为虽然显 示了完整的函数名,但是实际上FinSH 中却保存了前16 字节作为命令,过多的输入会导致无法正 确找到命令,这时就可以使用FinSH_FUNCTION_EXPORT_ALIAS 来对导出的命令进行重命名。

参数
name要导出的命令
alias导出到FinSH 时显示的名字
desc导出命令的描述
#define MSH_CMD_EXPORT( command,
 desc 
)

自定义C-Style 命令和变量

该接口可以将自定义命令导出到C-Style 模式。

参数
command要导出的命令
desc导出命令的描述
示例:
adc_vol_sample.c, dynmem_sample.c, event_sample.c, httpclient_sample.c, hwtimer_sample.c, i2c_aht10_sample.c, idlehook_sample.c, interrupt_sample.c, iwdg_sample.c, led_blink_sample.c, mailbox_sample.c, memp_sample.c, mkdir_sample.c, msgq_sample.c, mutex_sample.c, opendir_sample.c, pin_beep_sample.c, priority_inversion.c, producer_consumer.c, pwm_led_sample.c, readdir_sample.c, readwrite_sample.c, rename_sample.c, rtc_sample.c, scheduler_hook.c, sd_sample.c, semaphore_sample.c, signal_sample.c, spi_w25q_sample.c, stat_sample.c, tcpclient_sample.c, tcpclient_select_sample.c, tcpserver_sample.c, tell_seek_dir_sample.c, thread_sample.c, timer_sample.c, timeslice_sample.c, uart_sample.c, udpclient_sample.c , 以及 udpserver_sample.c.

函数说明

void finsh_syscall_append(const char * name,
syscall_func func 
)

添加调用函数

该函数将添加一个系统调用到FinSH的运行环境中去。

参数
name系统调用的名称
func系统调用的函数指针
void finsh_sysvar_append(const char * name,
uint8_t type,
void * addr 
)

添加环境变量

该函数将添加一个系统变量到FinSH的运行环境中去。

参数
name系统变量的名称
type系统变量的数据类型
addr系统变量的地址
rt_uint32_t finsh_get_prompt_mode(void )

调用此函数可以获取finsh shell的提示模式。

返回
prompt提示模式,0禁用提示模式,其他值启用提示模式。
void finsh_set_prompt_mode(rt_uint32_t prompt_mode)

可以通过调用此函数设置finsh shell的提示模式。

参数0禁用提示模式,其他值启用提示模式。

参数
prompt_mode提示模式
void finsh_set_device(const char * device_name)

设置finsh shell的输入设备

参数
device_name新的输入设备的名称
const char* finsh_get_device(void )

获取finsh shell的输入设备

该函数将返回当前finsh shell所使用的输入设备。

返回
返回当前finsh shell的输入设备名称
void finsh_set_echo(rt_uint32_t echo)

设置回显模式

该函数可以设置finsh shell的回显模式。

FINSH_OPTION_ECHO=0x01 时为回显模式, 其他值为不回显模式。

参数
echo回显模式
rt_uint32_t finsh_get_echo(void )

获取回显模式

该函数可以获取finsh shell是否工作在回显模式。

返回
回显模式参数值