上手PB(6)

测试增加一个字符串很快成功【数组不行】

分支9成功

再次回去分支8吧

syntax = "proto2";

message SimpleMessage {
	required int32  lucky_number = 1;
	required bool   success = 2;  
	required string dev_id = 3;

}



作为.proto文件

执行脚本.C.H加入工程

测试转化为流:
#include "simple.pb.h"
#include "cmd_pb.h"

    uint8_t dev_id[6]={"1234"};

	BytesType Bdev_id;

    uint8_t requestBuff[SIZE];
    memset(requestBuff,0,SIZE);

    pb_ostream_t requestStream = pb_ostream_from_buffer(requestBuff, SIZE);  
    SimpleMessage	A = SimpleMessage_init_zero; 
    A.lucky_number=24;
    A.success=0;

    pb_add_bytes(&Bdev_id , dev_id , strlen((char *)dev_id));
    pb_encode_bytes(&A.dev_id , &Bdev_id);



    if(pb_encode_respone(&requestStream ,SimpleMessage_fields ,&A))
    {
        G_printHEX(requestBuff,requestStream.bytes_written);//08 18 10 00 1A 04 31 32 33 34 
        printf("\r\n requestStream.max_size=%d\r\n",requestStream.max_size);//50表达你设定数组的大小
        printf("\r\n requestStream.bytes_written=%d\r\n",requestStream.bytes_written);//10表达的数据大小
        printf("\r\n requestStream.errmsg=%s\r\n",requestStream.errmsg);
    }

可以看到类似TLV 它PB没有压缩数据!!!
08 18 
10 00 
1A 04 31 32 33 34 

测试串口发给MCU解析
#include "simple.pb.h"
#include "cmd_pb.h"
typedef struct _RXSimpleMessage {
    uint8_t dev_id[50];

} RXSimpleMessage;
RXSimpleMessage B={0};
void smuart_test(void)
{
	static uint8_t  flag=0;
	smuart_init();
	while(1)
	{
		if(flag == 0)
		{
			if( 1 || smuart_TXRX_L2((uint8_t *)"hello",6,(uint8_t *)"world"))
			{
				flag = 1;
			}

		}

		if(flag==1)
		{
             puart_reinit();
             mode_clear();
			 flag = 2;
		}

		if(flag==2)
		{
			if(tflg.idle)
            {

                printf("OK 1 PAGE len=%d\r\n",udata.len);
                printf("%s\r\n",udata.rxBuff);
                printf("\r\n");
                G_printHEX(udata.rxBuff,udata.len);
                printf("\r\n");

                pb_istream_t requestStream = pb_istream_from_buffer((const uint8_t*)udata.rxBuff, udata.len);  
                SimpleMessage	A = SimpleMessage_init_zero; 

                pb_decode_bytes(&A.dev_id ,         B.dev_id);
                G_printHEX(B.dev_id,10);
                if(pb_decode(&requestStream, SimpleMessage_fields, &A) == TRUE )
                {

                    printf("\r\nA.lucky_number = %d\r\n",A.lucky_number);
                    G_printHEX(B.dev_id,10);
                    printf("\r\nA.success = %d\r\n",A.success);
                   }
                else
                printf("\r\nfail \r\n");
                
        
                mode_clear();
            }
		}
	 HAL_Delay(200);	
	}
}

串口发HEX  08 18 10 00 1A 04 31 32 33 34 
log
OK 1 PAGE len=10


08 18 10 00 1A 04 31 32 33 34 

00 00 00 00 00 00 00 00 00 00 

A.lucky_number = 24
31 32 33 34 00 00 00 00 00 00 

A.success = 0

 

《PowerBuilder 9.0进阶开发篇》(实例与技巧篇)配书光盘使用说明 本光盘内容为本书所有实例的源代码。如下: 第1章 窗口、控件与界面 1.1 类Outlook工具栏界面实现 -- Outlook 1.2 制作Splash窗口 -- Splash 1.3 制作美观的状态条 -- StatusBar 1.4 创建图标栏应用 -- Systray 1.5 MDI窗口显示背景图片 -- MDIBmp 1.6 窗口中控件显示ToolTips -- ToolTips 1.7 打造不一样的命令按钮 -- PictureButton 1.8 透明文本的实现 -- TransparentST 1.9 导航图界面的制作 -- FlowChat 1.10 制作图文并茂的菜单 -- BmpMenu 1.11 窗口内控件大小与窗口大小同步 -- Autosize 1.12 动态创建控件 -- DynamicControl 1.13 控件融合技术 -- SplitBar 第2章 数据窗口 2.1 数据窗口PDF格式文档输出 -- PDF 2.2 数据窗口组合条件查询 -- Query 2.3 数据窗口通用排序 -- UniversalSort 2.4 数据窗口通用显示列定制窗口的实现 -- ColumnVisible 2.5 数据窗口中实现增量查询 -- zlcx 2.6 数据窗口的多表更新 -- UpdateMultable 2.7 单击标题栏对数据窗口排序 -- TitleSort 2.8 动态数据窗口 -- DynamicDataWindow 2.9 复合数据窗口 -- AddTitle 2.10 数据窗口打印处理 -- PrintPreview/PrintPreview3 (PrintPreview和PrintPreview3内容是相同的,但在实现上有些区别) 2.11 数据窗口统计图类型的动态改变 -- GraphType 2.12 数据窗口统计图数值动态显示的实现 -- GraphValue 2.13 数据窗口中按钮的封装 -- DwButton 第3章 PowerScript 3.2 实现客户端程序的自动升级 -- CSUPgrade 3.3 进制转换 -- NumberConvert 3.4 注册表函数应用 -- Regedit 3.5 人民币大写转换函数 -- AmountUppder 3.6 在应用程序中关闭外部程序 -- CloseApp 3.7 在应用程序中启动控制面板项目 -- RunControl 3.8 非Tab分隔符文本文件导入数据窗口 -- ImportFile 3.9 编译后的程序带参数运行 -- CommandParm 3.10 取当月的最后一天函数 -- GetLastDay 3.11 限制同一程序多次运行 -- OnlyOnce 本章所使用的资源文件 -- pic 第4章 数据库与SQL 4.2 PowerBuilder + ASA8的C/S编程 -- Client-Server 4.4 动态SQL及其应用 -- DynamicSQL 4.5 存取二进制大对象 -- Blob 4.6 PowerBuilder应用取服务器时间 -- GetServerTime 4.7 PowerBuilder扩展属性系统表及其应用 -- SystemTable 4.8 连接任意ODBC数据源 -- ODBCList 4.9 可定制参数的数据库连接 -- ServerSet 第5章 打印专题 通用打印例子 -- Print 第6章 用户对象 6.1.1 创建定制的用户对象(创建弹压式按钮) -- ToggleButton 6.1.2 创建标准的可视用户对象(扩展的数据窗口) -- Datawindow 6.1.3 创建可视外部用户对象(状态条) -- StatusBar 6.2.2 创建通用不可视用户对象(FTP应用) -- Ftp 第7章 API 7.2.1 改变窗口的显示风格 -- ChangeWindow 7.2.2 使窗口的图片透明化 -- TransWindow 7.2.3 改变窗口的关闭形式 -- CloseStyle 7.2.4 PB中实现图形的复制与粘贴以及图像的简单处理 -- PictureBox 7.3.1 获得系统的内部进程 -- System Thread 7.3.2 获得系统基本信息 -- SystemInformation 7.4.1 检测物理网络的连通情况 -- Mping 7.4.2 关闭、重启、注销计算机 -- ExitWindow 7.5.1 使用Visual C++开发动态链接库 -- DllForPb9 7.5.2 使用Delphi开发动态链接库 -- SetScreen 7.5.3 使用Visual Basic开发ActiveX动态链接库 -- CPUInfo 第8章 pipeline 数据管道 -- pipeline 第9章 DDE、OLE、COM使用技术 9.1.3 DDE客户端实现步骤 -- DDE 9.2.5 不可视的OLE对象 -- pbtowordandexcel 9.2.6 ActiveX控件 -- Media 9.2.7 使用外部OLE控件处理数据库中的二进制数据 -- DBOLE 9.2.8 OLE精彩应用——开发具有XP风格的菜单 -- XPMenu 9.3.3 PowerBuilder中的COM组件实现 -- pb9com 第10章 编译发行 编译 -- TestInstall 第11章 Jaguar 包含开发Jaguar组件和调用Jaguar组件的两个例子的源程序 第12章 PBNI PBNI应用技术 -- PBNI 本光盘所收集内容的著作权为作者所有;作者授权清华大学出版社独家出版该光盘;清华大学出版社享有该光盘的专有出版权。 注意事项: 1. 第4章部分例程需要配置名为pbbook的ODBC数据源; 第5章例程需要配置名为PrintDB的ODBC数据源。 2. 某些例程可能会因环境原因而无法运行,但源代码可供参考。 3. 部分例程所在目录有说明文件,请注意阅读。 4. 如有疑问,欢迎到以下网站探讨: PB编程俱乐部 http://www.kejx.com 或 http://kjx.126.com 摆渡人工作室 http://www.pbsite.com 技术支持: 电 话:010-62791976-220或010-62791977-220(编辑部) 传 真:010-62788903 E-mail:kjx@163.com(柯建勋) ztao@pbsite.com(张涛) oyzx_sp@263.net(编辑) 通信地址:北京市清华大学校内金地公司 邮 编:100084
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值