• finsh初步


    一. finsh在RT-Thread中被设计成一个独立的线程,它试图从外部设备中获得用户的输入,然后对用户命令进行解析执行。

    正确使用finsh需要一个关联过程:

    1. rt_hw_board_init()函数调用串口初始化函数rt_hw_usart_init(),此函数初始化串口,并向系统注册“usart1”设备,接着系统调用rt_console_set_device()函数设置“usart1”作为console输出。
    2. 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
    ", wang_num);
    }
    
    FINSH_FUNCTION_EXPORT(wang, just test)
    FINSH_VAR_EXPORT(wang_num, finsh_type_int, just var test)
    
    //#endif
    #endif

    执行结果:

  • 相关阅读:
    Java中的各种锁总结2
    Java中锁的总结学习
    双亲委派模型
    mybatis中使用in查询问题
    ArrayList、LinkedList、Vector 区别,优缺点,实现原理
    java value注解总结
    linux-系统启动流程
    linux-文本编辑器
    linux-LVM 逻辑卷
    nodejs + access 应用
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/5450375.html
Copyright © 2020-2023  润新知