finsh(c-style)中增加命令/变量
finsh支持两种方式向finsh中输出符号(函数或变量),下面将分别介绍这两种方式。
宏方式
需要在rtconfig.h中定义宏FINSH_USING_SYMTAB。
- #include <finsh.h>
- FINSH_FUNCTION_EXPORT(name, desc)
- 参数 描述
- name 函数指针,一般为函数名;
- desc 针对这个函数命令的描述信息;
desc一般为一段字符串,中间不可以有逗号,两边也没有引号。
- FINSH_VAR_EXPORT(name, type, desc)
- 参数 描述
- name 变量名;
- type 变量类型;
- desc 变量描述;
type的包括以下类型:
- enum finsh_type{
- finsh_type_unknown = 0, /**< unknown data type */
- finsh_type_void, /**< void */
- finsh_type_voidp, /**< void pointer */
- finsh_type_char, /**< char */
- finsh_type_uchar, /**< unsigned char */
- finsh_type_charp, /**< char pointer */
- finsh_type_short, /**< short */
- finsh_type_ushort, /**< unsigned short */
- finsh_type_shortp, /**< short pointer */
- finsh_type_int, /**< int */
- finsh_type_uint, /**< unsigned int */
- finsh_type_intp, /**< int pointer */
- finsh_type_long, /**< long */
- finsh_type_ulong, /**< unsigned long */
- finsh_type_longp, /**< long pointer */
- };
此外FINSH还提供了另外一个宏,它在输出函数为命令时,可以指定命令的名字。
- #include <finsh.h>
- FINSH_FUNCTION_EXPORT_ALIAS(name, alias, desc)
- 参数 描述
- name 函数指针,一般为函数名;
- alias 输出到finsh中的命令名;
- 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来对导出的命令进行重命名。
一个简单的输出函数和变量到finsh的例子:
- #include <finsh.h>
- int var;
- int hello_rtt(int a)
- {
- rt_kprintf("hello, world! I am %d\n", a);
- return a;
- }
- FINSH_FUNCTION_EXPORT(hello_rtt, say hello to rtt)
- FINSH_FUNCTION_EXPORT_ALIAS(hello_rtt, hr, say hello to rtt)
- FINSH_VAR_EXPORT(var, finsh_type_int, just a var for test)
编译后运行,可以看到finsh中增加了两个命令,一个变量var。
函数方式
- #include <finsh.h>
- void finsh_syscall_append(const char* name, syscall_func func)
- 参数 描述
- name 函数在finsh中访问的名称,即命令名;
- func 函数地址,一般为函数名;
这个函数可以输出一个函数到finsh中,使之可以在finsh命令行中使用。
- #include <finsh.h>
- void finsh_sysvar_append(const char* name, u_char type, void* addr)
- 参数 描述
- name 变量在finsh中访问的名称,即命令名;
- type 变量的类型;
- addr 变量地址;
这个函数用于输出一个变量到finsh中。