打印
[C语言]

单片机系统进行串口shell编程开发

[复制链接]
2471|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
manwoaini521|  楼主 | 2017-1-10 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
renxiaolin| | 2017-1-10 14:11 | 只看该作者
这个有人从uboot移植啦一个shell,你参考人家的吧

使用特权

评论回复
板凳
manwoaini521|  楼主 | 2017-1-10 14:38 | 只看该作者
renxiaolin 发表于 2017-1-10 14:11
这个有人从uboot移植啦一个shell,你参考人家的吧

有链接嘛

使用特权

评论回复
地板
manwoaini521|  楼主 | 2017-1-10 15:05 | 只看该作者
宏定义 # ## do{}while(0)使用

1、#使用
    作用: #是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串。
    举例:
    #define PRINT(a)  printf( #a );    PRINT(hello)========printf( "hello" )
2、##使用
    作用: “##”是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。
举例:
   #define _MENU(_a) _a
   #define MENU(a) {_MENU(a), menu_output_##a, menu_input_##a },
      MENU(main)========{main,menu_output_main,menu_input_main}


2、do{}while(0)使用
   作用:
                辅助定义复杂的宏,避免引用的时候出错
举例:
          #define PRINT(a)        do{\
                                                        if( flag ){\
                                                                printf( "\n\t" );\
                                                                printf( #a );\
                                                                printf( "\r\n" );\
                                                        }\
                                                        else{\
                                                                printf( "%-20s", #a );\
                                                        }\
                                                }while( 0 );

使用特权

评论回复
5
renxiaolin| | 2017-1-10 16:10 | 只看该作者

使用特权

评论回复
6
manwoaini521|  楼主 | 2017-1-10 16:43 | 只看该作者
菜单项命令名和函数指针组成的结构体的数组:实现函数名和菜单项命令名之间有直观的、名字上的关系菜单宏定义
#define MENU(a) {_MENU(a), menu_output_##a, menu_input_##a },
结构体
typedef struct {
        u32 num;    菜单编号
        void ( *f_output )(bool ); 菜单输出
        bool ( *f_input )( ); 菜单输入
}st_menu;
输入输出函数宏定义
#define OUTPUT(x)   static void inline menu_output_##x(bool flag)
#define INPUT(x)    static bool inline menu_input_##x(void)

声明菜单结构体数组
tatic const st_menu table[ ]={
        MENU( MAIN ) /* 0 */
        MENU( SYSTEM ) MENU( RUN ) MENU( SYSTEM_PARA ) MENU( ENGINEER_MODLE ) /* 1-5 */

}
实现部分:
OUTPUT( SYSTEM )
{
        PRINT( 设备信息 );
        if( !flag ){
                printf( "\r\n" );
        }
}


INPUT( SYSTEM )
{
        return menu_input_MAIN( );
}





使用特权

评论回复
7
JerryWu75| | 2017-1-10 17:00 | 只看该作者
这种配合开发调试用的上位机还是比较简单的, 用片CH340做个USB-Serial的通信板,VC或者QT写个串口程序.
以前一直用VC写串口程序,这两年改成QT for win7, 感觉QT工作量比VC小.

使用特权

评论回复
8
manwoaini521|  楼主 | 2017-1-10 17:32 | 只看该作者
JerryWu75 发表于 2017-1-10 17:00
这种配合开发调试用的上位机还是比较简单的, 用片CH340做个USB-Serial的通信板,VC或者QT写个串口程序.
以前 ...

上位机没人来做,移植串口shell,相当于超级终端

使用特权

评论回复
9
冰零分子| | 2017-1-10 19:42 | 只看该作者
谢谢分享

使用特权

评论回复
10
@若水| | 2017-1-10 21:43 | 只看该作者
是开源的吗?

使用特权

评论回复
11
manwoaini521|  楼主 | 2017-1-10 22:22 | 只看该作者
正在研究,下步给大家详细介绍

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

25

帖子

1

粉丝