finsh初步
初步 FinSH
2023-06-13 09:11:28 时间
大家好,又见面了,我是你们的朋友全栈君。
一. finsh在RT-Thread中被设计成一个独立的线程,它试图从外部设备中获得用户的输入,然后对用户命令进行解析执行。
正确使用finsh需要一个关联过程:
- rt_hw_board_init()函数调用串口初始化函数rt_hw_usart_init(),此函数初始化串口,并向系统注册“usart1”设备,接着系统调用rt_console_set_device()函数设置“usart1”作为console输出。
- rtthread_startup()函数中调用finsh_system_init()初始化finsh组件,并调用finsh_set_device(“usart1”),将“usart1”和finsh关联起来,这样usart1的输入即可被finsh读入并分析、执行。
上述过程需要正确配置如下项:
#define RT_USING_FINSH //rt_config.h
#define RT_USING_UART1 //rt_config.h
#define RT_CONSOLE_DEVICE_NAME “usart1” //rtconfig.h
二.finsh中自定义命令、函数及变量
使用宏方式输出,需在rtconfig.h中定义FINSH_USING_SYMTAB
FINSH_FUNCTION_EXPORT()
FINSH_FUNCTION_EXPORT_ALIAS()
FINSH_VAR_EXPORT()
#include <rtthread.h>
#ifdef RT_USING_FINSH
//#ifdef FINSH_USING_SYMTAB
#include <finsh.h> // must include
static int wang_num = 1;
void wang(int num)
{
if(num < 10000)
wang_num = wang_num++ * 2;
rt_kprintf("Param:%d\n", wang_num);
}
FINSH_FUNCTION_EXPORT(wang, just test)
FINSH_VAR_EXPORT(wang_num, finsh_type_int, just var test)
//#endif
#endif
执行结果:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143215.html原文链接:https://javaforall.cn