[C语言] 单片机系统进行串口shell编程开发

[复制链接]
 楼主| manwoaini521 发表于 2017-1-10 11:56 | 显示全部楼层 |阅读模式
开发需求:
      1、产品需要不同的配置参数
      2、没有可用的上位机程序
      3、移植串口shell终端程序
特此发帖,用来记录开发过程,分享与大家
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 );

renxiaolin 发表于 2017-1-10 16:10 | 显示全部楼层
 楼主| 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( );
}





JerryWu75 发表于 2017-1-10 17:00 | 显示全部楼层
这种配合开发调试用的上位机还是比较简单的, 用片CH340做个USB-Serial的通信板,VC或者QT写个串口程序.
以前一直用VC写串口程序,这两年改成QT for win7, 感觉QT工作量比VC小.
 楼主| manwoaini521 发表于 2017-1-10 17:32 | 显示全部楼层
JerryWu75 发表于 2017-1-10 17:00
这种配合开发调试用的上位机还是比较简单的, 用片CH340做个USB-Serial的通信板,VC或者QT写个串口程序.
以前 ...

上位机没人来做,移植串口shell,相当于超级终端
冰零分子 发表于 2017-1-10 19:42 | 显示全部楼层
谢谢分享
@若水 发表于 2017-1-10 21:43 | 显示全部楼层
是开源的吗?
 楼主| manwoaini521 发表于 2017-1-10 22:22 | 显示全部楼层
正在研究,下步给大家详细介绍
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

25

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

11

主题

25

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部