开发板模拟上下位机通讯基本思路

最近导师派的新活:写一个和开发板的通讯软件,要求能够传输开发板的屏幕、led灯、lcd数字(大小0-255之间?还是字符?)显示屏等信息(局域网内,所以速度可以有保证)。

上位机:PC用QT作界面,背景弄成开发板的背景。

下位机:由公司人员负责

协议:协议基本上已经定完(需按32字节对齐封装),但是具体的包怎么发送还没有给我说。

基本思路:

屏幕信息通过传图片过来,led和lcd也通过类似数据帧过来。开一个线程定时发送请求,然后用主线程一直通过UDP收包(收包的时候需要考虑到过来的信息是三种类型的,而且不知道公司那边是怎么搞,有可能是同时发送过来在一个UDP包里面)。

目前完成的工作:

1.界面的搭建以及界面ui的响应函数已经完成

2.自定义结构体已经定义出来,大概分为以下几种:

/*结构体定义和各类宏定义*/
#ifndef DATA_H
#define DATA_H
#define REV_AUTO_PORT 9001
#define REV_MAN_PORT 9003


#define LED_ON 1
#define LED_OFF 0
#define LED_COUNT 8


#define DATA_PIC 28

typedef unsigned char                    UINT8;

struct general_frame
{
	UINT8 Type;    
	UINT8 data[31];
};
struct command_frame   //请求命令帧格式
{
	UINT8 commandType;  请求命令类型
	UINT8 reserved[31]; 保留字段
};

struct probe_frame
{
	UINT8 dataType;   数据类型
	UINT8 reserved[31]; 保留字段
};

struct pic_frame
{
	UINT8 dataType;
	UINT8 padding; /标识最后一个包的填充字节数(0-32)
	UINT8 reserved;
	UINT8 data[28];
	UINT8 finishFlag;
};

struct led_frame
{
	UINT8 dataType;
	UINT8 led1;
	UINT8 led2;
	UINT8 led3;
	UINT8 led4;
	UINT8 led5;
	UINT8 led6;
	UINT8 led7;
	UINT8 led8;
	UINT8 reserved[23];
};

struct lcd_frame
{
	UINT8 dataType;
	UINT8 lcdNumber[2];
	UINT8 reserved[29];
};
#endif
3.用java试着写了个demo,尝试了一下UDP传输图片,发现基本不会丢包(公司工程师建议用UDP,开始觉得不可行),也就是说UDP传输这种简单的方式在局域网下没问题。

4.按照上面定义,想的是每32字节对齐封装,然后接包的时候按32字节拆(因为图片有多个包,而且不一定能对齐,所以需要padding字段),检测如果数据类型是图片数据,则一直取对应的图片数据并不断拼接,直到读到完毕则emit对应的刷新屏幕的信号并响应。检测如果数据类型是LED和LCD则很好处理,直接取出对应数据就emit 对应刷新led和lcd数字信号并响应。

5.目前在写UDP接收部分的图片处理部分,为了测试按照上面的定义写了一个UDP发送端的小程序,今天写完了在测试,但是测试发现现在把图片拆成多个帧发送拆的有问题。

下一步工作:

1.检查图片拆分以及封装、测试图片接收模块

2.完成UDP的LED以及LCD接收模块并测试

3.完成请求线程并测试




PS.今天还遇到一个特别大的问题就是Qt的UDPsocket通信readReady信号一直没反应,后来发现好像是被其他网络软件给占用了还是怎么着,把好几个软件关了就能用了。




接收端建议使用绑定模式QUdpSocket::ShareAddress,它表明其他服务也可以绑定到这个端口上
    receiverSocket->bind(45454,QUdpSocket::ShareAddress);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值